C++ std::排序函数在字符数组中不起作用
我正在从字符串中提取小写和大写字符。然后在中按排序顺序打印这些大小写字符串。为了对字符串进行排序,我使用了std::sort函数。但它不起作用 这是我的密码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>
#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';