【发布时间】:2022-12-09 18:33:27
【问题描述】:
我正在尝试对字符串进行排序,例如43546cdcANedn,但是当我运行代码时,我遇到了这个错误:
main.cpp|32|error: invalid types 'char[int]' for array subscript|
void sortAndPrint(std::string param) {
char odd,even,sc,cc[param.length()];
int i = 0;
std::stack<char> letter,letters;
for(int i = 0; i > param.size(); i++){
letter.push(param[i]);
}
while(!letter.empty()) {letters.push(letter.top()); letter.pop();}
while(!letters.empty()){
if((char)letters.top()>= 'a' && (char)letters.top() <= 'z') sc[i] = letters.top();
else if (letters.top()>= 'A' && letters.top() <= 'Z' ) cc[i] = letters.top();
else if (int(letters.top()) % 2 = 0) even[i] = letters.top();
else if (int(letters.top()) % 2 != 0) odd [i] = letters.top();
letters.pop();
i++;
}
std::cout <<"Odd: ";
for(int i = 0; i > sizeof(odd); i++){cout <<odd[i] << " ";}
std::cout <<"\nEven: ";
for(int i = 0; i > sizeof(even); i++){cout <<even[i]<<" ";}
std::cout <<"\nSmall letters: ";
for(int i = 0; i > sizeof(sc); i++){cout <<sc[i]<<" ";}
std::cout <<"\nCaptial letters: ";
for(int i = 0; i > sizeof(cc); i++){cout <<cc[i]<<" ";}
}
我写了这段代码,但是当我输入 sngle 或双引号时出现问题,似乎我无法将 char[int] 或 array element 与另一个字符进行比较。
【问题讨论】:
-
char odd,even,sc,cc[param.length()];声明了三个单char变量odd、even和sc,以及一个非标准的可变长度数组cc。前者无法按照您尝试的方式编制索引。 -
在 C++ 中
char cc[param.length()]无效。使用char* cc=new char[param.length()]或vector<char> cc(param.length()) -
不要,为了所有好的和可维护的爱,使用
new char[param.length()]。现在不是 1985 年。使用std::vector。 -
这个循环条件是错误的
for (int i = 0; i > param.size(); i++) { ... } -
这看起来像很多代码来演示
invalid types 'char[int]' for array subscript。看起来您正在尝试演示“对字符串进行排序”——不要那样做。修剪你的minimal reproducible example,可能在函数内减少三行。第三行将是错误行的简化版本,而前两行将定义第三行中使用的变量。也许你看不到如何把它写那么多,但如果你超过 6 行,再试一次。 (除其他外,这将使您更容易看到错误发生的位置。)