c++:在修改 c 字符串数组时帮助纠正无限循环

Posted

技术标签:

【中文标题】c++:在修改 c 字符串数组时帮助纠正无限循环【英文标题】:c++ : Help correcting endless loop while modifying c-string array 【发布时间】:2015-12-01 00:08:28 【问题描述】:

我有一个家庭作业,其中涉及从用户输入创建一个 c 字符串数组,修改数组的内容,使每个其他字母大写,并输出最终结果。我的代码目前陷入无限循环。我很难准确理解如何访问数组然后修改它。 (我们这周才开始使用数组。)我在下面粘贴了我的代码。任何帮助表示赞赏!

#include <iostream>
#include <cctype>
#include <string>
#include <cstring>

const int j = 1024;

using namespace std;

int main()

    char letter;
    char lineArray[j];
    char modifyArray[j];

    cout << "Hello! Please type a letter, word, "  //user input prompt
    << "or phrase, followed by enter." << endl;

    cin.getline(lineArray, j);

    for(int i=0; i < 1024; i++)
    
         letter = lineArray[i];

        while (letter != '\n')           //change and store letters
            
                if (i%2 == 0)
                    letter = toupper(letter);
                else if(i%2 != 0)
                    letter = tolower(letter);
            

        modifyArray[i] = letter;
    

    cout << modifyArray[j];

    return 0;

【问题讨论】:

并非每一行都以 '\n' 结尾。在迭代之前计算字符串的长度。 如果第一个字母是'A',那么while循环将无限循环,因为'A' != '\n',改成'a'也没关系,因为@987654326 @ 也不等于 '\n'。外部循环应该是for(int i=0;lineArray[i]!='\0';i++),而while 只需要消失即可。 while (letter != '\n') - 离开这里的唯一方法是将字母设置为'\n' - 你永远不会这样做...... - 也不需要说else if (i%2 != 0),只需说else 【参考方案1】:

在下面的代码sn-p

letter = lineArray[i];
while (letter != '\n')           //change and store letters
    
        if (i%2 == 0)
            letter = toupper(letter);
        else if(i%2 != 0)
            letter = tolower(letter);
    

您正在基于letter 循环,但在循环内部,它不会以永远更改为'\n' 的方式更改。

另外,当使用getline 时,'\n' 字符(换行符)不会被放入字符串中,因此您与'\n' 的比较是没有意义的。相反,将您的 for 循环更改为以下内容(并删除 while 循环):

for(int i=0; i < strlen (lineArray) + 1; i++) // You need strlen + 1, because otherwise string terminating '\0' character wouldn't be copied over.

这样,您将准确地循环字符串的长度(假设 in 永远不会超过 1024 个字符。

另外,你应该像这样打印数组:

cout << modifyArray;

因为在您的代码中,您正在打印超出数组范围的第一个字符。

【讨论】:

非常感谢!我的代码现在完美运行。非常感谢您的帮助。

以上是关于c++:在修改 c 字符串数组时帮助纠正无限循环的主要内容,如果未能解决你的问题,请参考以下文章

在c ++ 11中使用异常时的无限循环

为啥我的代码在执行时的初始嵌套 for 循环中进入无限循环?

用于十六进制的 c/c++ 中的 Aho-Corasick 算法

c ++处理来自输入文件的数据会创建无限循环

动态数组C风格字符串字符串字面值

当用户输入除整数以外的任何内容时,为啥我的程序会无限循环输出? C++ [重复]