std :: sort函数在char数组中不起作用

时间:2017-06-06 15:02:05

标签: c++ sorting

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

这是我的代码

Ag <- lapply(files, 
 function(f) aggregate(HS ~ Year, read.table(f, header = TRUE, sep = ";"), max))

测试用例:

#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;
}

输出:

1    // number of test cases
15   // length of string
abHJUdjKIpwlaKm

排序大写字符串后甚至不打印。

3 个答案:

答案 0 :(得分:4)

您有索引错误,修复:

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';

在此代码段中交换了kj

答案 1 :(得分:4)

更好的变量名称会有所帮助。尝试使用jk等更具描述性的内容替换lowIndexuprIndex。然后你应该看到问题。

答案 2 :(得分:2)

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