strcmp函数只能对字符指针(变化的地址)或数组名(固定的地址)进行比较asc2码

来源:互联网 发布:互联网大数据分析 编辑:程序博客网 时间:2024/06/05 03:19

很不错的网址:http://www.cplusplus.com/

1、strcmp函数的功能是比较str1和str2这两个字符串的大小,规则是从左往右比较两个字符串对应位置的ASC2码值的大小,两个对应位上的字符不相同时,或者遇到字符串结束符(\0),则返回结果。

      当str1<str2时,返回负数;当str1=str2时,返回0;当str1>str2时,返回正数。

2、以下做法是错误的,因为strcmp的参数必须是char *类型的,而a,a[0]不是指针类型的。

string a("abc");string b("cnbvb");strcmp(a,b);         //错误strcmp(a[0],b[0]);   //错误
正确的做法如下,必须先将string类型的对象a,b用c_str()方法转化为字符串。
//姓名排序#include<iostream>#include<string>#include<cstring>#include<algorithm>using namespace std;struct man{string name;};bool cmp(man a,man b){return strcmp(a.name.c_str(),b.name.c_str())<0;}int main(){int m;//测试用例数cin>>m;int n;//人数while(m--){man ma[10];cin>>n;for(int i=0;i<n;i++){cin>>ma[i].name;}sort(ma,ma+n,cmp);for(int j=0;j<n;j++){cout<<ma[j].name;cout<<endl;}}return 0;}
也可以避开这一点:
//姓名排序#include<iostream>#include<cstdio>#include<string>#include<algorithm>#include<cstring>using namespace std;struct man{char name[20];};bool cmp(man a,man b){return strcmp(a.name,b.name)<0;}int main(){int m;//测试用例数cin>>m;int n;//人数while(m--){man ma[10];cin>>n;for(int i=0;i<n;i++){scanf("%s",&ma[i].name);}sort(ma,ma+n,cmp);for(int j=0;j<n;j++){printf("%s",ma[j].name);cout<<endl;}}return 0;}
3、新知识:string的begin()方法返回的是其对象的第一个元素的指针,end()方法是返回其对象的最后一个元素的指针。
string s="agree";sort(s.begin(),s.end());

0 0
原创粉丝点击