Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么Vector赢了';t排序?_C++_Sorting_Vector - Fatal编程技术网

C++ 为什么Vector赢了';t排序?

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',' ','!','@','#','$','%','^','&','*','(',')','+','-','_','=','{'

我在oj上解决一个问题。但突然我发现
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 !@#$%^&*()+-_={}[]:;\"<>?/|";