您的位置:首页 > 其它

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

2014-02-20 21:13 906 查看
很不错的网址: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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐