Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++ std::排序函数在字符数组中不起作用_C++_Sorting - Fatal编程技术网

C++ std::排序函数在字符数组中不起作用

C++ std::排序函数在字符数组中不起作用,c++,sorting,C++,Sorting,我正在从字符串中提取小写和大写字符。然后在中按排序顺序打印这些大小写字符串。为了对字符串进行排序,我使用了std::sort函数。但它不起作用 这是我的密码 #include <bits/stdc++.h> using namespace std; int main() { //std::ios::sync_with_stdio(false); char str[1005]; char low[1005]; char upr[1005]; int n; int t; cin>

我正在从字符串中提取小写和大写字符。然后在中按排序顺序打印这些大小写字符串。为了对字符串进行排序,我使用了std::sort函数。但它不起作用

这是我的密码

#include <bits/stdc++.h>

using namespace std;
int main() {
//std::ios::sync_with_stdio(false);
char str[1005];
char low[1005];
char upr[1005];
int n;
int t;
cin>>t;
while(t--)
    {
    cin>>n;
    cin>>str;
    low[0]='\0';
    upr[0]='\0';
    int i=0,j=0,k=0;
    while(i<n)
        {
        (str[i]>='A' && str[i]<='Z') ? (upr[j]=str[i],++j) : (low[k]=str[i],++k) ;
        ++i;
        }
    low[j]='\0';
    upr[k]='\0';
    cout<<"lowercase="<<low<<'\n';
    cout<<"uppercase="<<upr<<'\n';
    sort(low,low+j);
    sort(upr,upr+k);
    cout<<"lowercase="<<low<<'\n';
    cout<<"uppercase="<<upr<<'\n';
    }
return 0;
}
输出:

lowercase=abdjpw    //before sorting
uppercase=HJUKIK    //before sorting
lowercase=abdjpw     //after sorting
uppercase=          //after sorting

对大写字符串进行排序后,甚至不打印。

如果索引存在错误,请修复:

low[k] = '\0';
upr[j] = '\0';
cout << "lowercase=" << low << '\n';
cout << "uppercase=" << upr << '\n';
sort(low, low + k);
sort(upr, upr + j);
cout << "lowercase=" << low << '\n';
cout << "uppercase=" << upr << '\n';
low[k]='\0';
普遍定期审议[j]='\0';

cout更好的变量名会有所帮助。尝试将
j
k
替换为更具描述性的内容,如
lowIndex
upindex
。然后您应该会看到问题。

我注意到您在while循环中使用j变量表示大写字母,k表示小写字母,然后在后面继续执行相反的操作。这是故意的吗?想知道这是否会导致错误。

(str[i]>='a'&&str[i]看看你使用的变量的名字,直到答案出现。然后考虑你可以用更多的信息来保存多少时间。对于一个模糊的C++竞赛,这是不完全理解的。但是对于普通的代码,这在清晰上是很糟糕的。为什么所有的索引而不是几条代码>td::string
s?为什么是可怕的三元运算符?为什么是单字母变量(这实际上导致了整个问题)?以及。
low[k] = '\0';
upr[j] = '\0';
cout << "lowercase=" << low << '\n';
cout << "uppercase=" << upr << '\n';
sort(low, low + k);
sort(upr, upr + j);
cout << "lowercase=" << low << '\n';
cout << "uppercase=" << upr << '\n';