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

c++ : Help correcting endless loop while modifying c-string array

本文关键字:帮助 无休止 循环 数组 修改 字符串 c++      更新时间:2023-10-16

我有一项家庭作业,包括根据用户输入创建一个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;
}

在以下代码片段中

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 '' character wouldn't be copied over.

这样,您就可以精确地循环一个字符串的长度(假设in的长度永远不会超过1024个字符)

此外,您应该像这样打印数组:

cout << modifyArray;

因为在您的代码中,您要打印超出数组边界的第一个字符。