【解決方法】文字列の添え字が範囲外のエラーを解決するにはどうすればよいですか?


I'm very new to c++ and i'm struggling with fixing this string subscript out of range error. It complies but i cannot run it of course.
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    string sentence, word = "";
    int wordCounter = 1;
    ifstream file("secret.txt");
    getline(file, sentence); 
    for (int i = 0; i < sentence.length(); i++) {
        if (sentence[i - 1] == ' ') {
            wordCounter++;
            if ((wordCounter) % 5 == 0) {
                word += sentence[i] - 32;
            }
        }
    }
    cout << word;
    return 0;
}

secret.txt が気になる方は以下の通り

January is the first month and december is the last. Violet is a purple color as are lilac and plum.

私が試したこと:

私の最善の推測は、いくつかの条件が満たされていないことですが、どれがどれかわかりません。

解決策 1

C++
for (int i = 0; i < sentence.length(); i++) {
    if (sentence[i - 1] == ' ') {

このループは初めて i はゼロに等しいので、 i - 1 文字列の最初の文字の前にあるため、マイナス 1 は無効な添え字です。 添え字はゼロから始まり、 string.length() -1.

解決策 2

あなたのコードを見てください:

C++
for (int i = 0; i < sentence.length(); i++) {
    if (sentence[i - 1] == ' ') {

でループを開始します i ゼロに設定します。 最初に行うことは、 i - 1 インデックスである配列の要素 -1.
C++ 配列は常にゼロから始まるため、負のインデックスは存在できず、エラーが発生します。

正直なところ、デバッガーを 30 秒使用すれば、何が間違っていたのかが正確に示され、それを見つける時間を節約できたでしょう。 デバッガはあらゆる開発の親友であるため、少なくとも基本的なことを理解するために少し時間を費やす価値があります。Google は、特定の IDE での使用方法を見つけるのに役立ちます。

あなたがやろうとしていることを正確に考えて、おそらくこれを読んでください: 問題を解決するためのコードの書き方、初心者向けガイド[^] さらに先に進む前に。

コメント

タイトルとURLをコピーしました