簡體   English   中英

c++ : 在修改 c 字符串數組時幫助糾正無限循環

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

我有一個家庭作業,涉及從用戶輸入創建一個 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 '\0' character wouldn't be copied over.

這樣,您將精確循環字符串的長度(假設 in 永遠不會超過 1024 個字符。

此外,您應該像這樣打印數組:

cout << modifyArray;

因為在您的代碼中,您正在打印超出數組范圍的第一個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM