C++ 为什么Vector赢了';t排序?
我在oj上解决一个问题。但突然我发现C++ 为什么Vector赢了';t排序?,c++,sorting,vector,C++,Sorting,Vector,我在oj上解决一个问题。但突然我发现vector不符合我的目的。我做错了什么?如果有人能让我明白这个问题。。。问题描述很简单,您只需要从输入文件中提取单词并对其进行排序。以下是我所做的,但不会排序: vector<char*>V; char str[501][201]; int l=0; char str1[]= {'~','.','\n','\r',' ','!','@','#','$','%','^','&','*','(',')','+','-','_','=','{'
vector
不符合我的目的。我做错了什么?如果有人能让我明白这个问题。。。问题描述很简单,您只需要从输入文件中提取单词并对其进行排序。以下是我所做的,但不会排序:
vector<char*>V;
char str[501][201];
int l=0;
char str1[]= {'~','.','\n','\r',' ','!','@','#','$','%','^','&','*','(',')','+','-','_','=','{','}','[',']',':',';','"','<','>','?','/','|'};
while(gets(str[l++]))
{
for(int i=0; str[l-1][i]; i++)
{
if(str[l-1][i]>='A' && str[l-1][i]<='Z')str[l-1][i]=str[l-1][i]-'A'+'a';
}
char *pch;
pch=strtok(str[l-1],str1);
while(pch!=NULL)
{
// printf("%s\n",pch);
V.push_back(pch);
pch=strtok(NULL,str1);
}
}
sort(V.begin(),V.end());
for(vector<char*>::iterator it=V.begin(); it!=V.end(); it++)
cout<<*it<<endl;
vectorV;
char-str[501][201];
int l=0;
字符str1[]={'~'、'.'、'\n'、'\r'、'!'、'@'、'.'、'$'、'%'、'^'、'&'、'*'、'('、')'、'+'、'-'、'.'''''.'、''='、''.'、'['、':'、'.'、'.'、''.'、'.'、'/'、'.'.'.''.''.''.'''.''.''.'.'.'.'-';
while(获取(str[l++]))
{
for(int i=0;str[l-1][i];i++)
{
如果(str[l-1][i]>='A'和&str[l-1][i]当应用于char*
时,是排序,但可能不是您想要的方式。尝试将strcmp
传递到sort
,它应该可以工作。您确实不应该使用strtok
和char*
s,也尝试使用std::string
。@Massa:strcmp
不会返回真实的iif值第一个字符串在字典上比第二个字符串小,所以它不会以这种方式工作,不是吗?如果使用std::vector
,那么std::sort
将实现您期望的效果。
sort(V.begin(), V.end(),
[](char const * a, char const * b) { return strcmp(a, b) < 0; });
struct CStringLess {
bool operator()(char const * a, char const * b) const {
return strcmp(a, b) < 0;
}
};
⋮
sort(V.begin(), V.end(), CStringLess());
char * str1 = "~.\n\r !@#$%^&*()+-_={}[]:;\"<>?/|";