【问题标题】:invalid types 'char[int]' for array subscript数组下标的无效类型 \'char[int]\'
【发布时间】: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变量oddevensc,以及一个非标准的可变长度数组cc。前者无法按照您尝试的方式编制索引。
  • 在 C++ 中 char cc[param.length()] 无效。使用char* cc=new char[param.length()]vector&lt;char&gt; cc(param.length())
  • 不要,为了所有好的和可维护的爱,使用new char[param.length()]。现在不是 1985 年。使用 std::vector
  • 这个循环条件是错误的for (int i = 0; i &gt; param.size(); i++) { ... }
  • 这看起来像很多代码来演示invalid types 'char[int]' for array subscript。看起来您正在尝试演示“对字符串进行排序”——不要那样做。修剪你的minimal reproducible example,可能在函数内减少三行。第三行将是错误行的简化版本,而前两行将定义第三行中使用的变量。也许你看不到如何把它写那么多,但如果你超过 6 行,再试一次。 (除其他外,这将使您更容易看到错误发生的位置。)

标签: c++ arrays


【解决方案1】:

所以我在你的帮助下找到了答案, 我编辑的内容:

  • 删除Char arrays并添加Vector
  • 修复 for 循环
  • 将条件更改为 ASCII 代码
void sortAndPrint(std::string param) {
    std::vector < char > cc;
    std::vector < char > sc;
    std::vector < char > even;
    std::vector < char > odd;
    for (int i = 0; i < param.length(); i++) {
        char letter = param[i];
        if (int(letter) >= 97 && int(letter) <= 122) sc.push_back(letter);
        else if (int(letter) >= 56 && int(letter) <= 90) cc.push_back(letter);
        else if (int(letter) >= 47 && int(letter) <= 58) {
            if ((int(letter)) % 2 == 0) even.push_back(letter);
            else odd.push_back(letter);
        }
    }
    std::cout << "Odd: ";
    for (int i = 0; i < odd.size(); i++) std::cout << odd.at(i) << " ";
    std::cout << "
Even: ";
    for (int i = 0; i < odd.size(); i++) std::cout << even.at(i) << " ";
    std::cout << "
Small letters: ";
    for (int i = 0; i < odd.size(); i++) std::cout << sc.at(i) << " ";
    std::cout << "
Big Letters: ";
    for (int i = 0; i < odd.size(); i++) std::cout << cc.at(i) << " ";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2012-09-07
    • 2015-09-26
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多