2016-09-27 6 views
-2

この割り当てを行うと、情報を構造体に解析し、テストしようとすると "範囲外の文字列"というエラーが返されます。私が間違っていた場所を見つけ出す。"文字列下付き文字を範囲外に"受け取るエラー

はここにあなたが空のstd ::文字列オブジェクトを作成し、特定の位置に文字を割り当てた場合は、ここで私の機能

baby_type Parse_Line(const std::string line) 
{ 

baby_type baby; 
std::string name; 
std::string year;// = "0000"; 
std::string total; 
int i = 0; 
int k = 1; 
int LengthOfOccurences = 0; 
int DigitOfOccurences = 0; 

while (line.at(i) != ',') { 
    name[i] = line.at(i); 
    i++; 
} 
baby.name = name; 
i++; 

while (k < 100) { 
    if (line.at(i) == ',') { 
     year.resize(LengthOfOccurences); 
     baby.yearsCount.at(k) = std::stoi(year); 
     //year = "0000"; 
     i++; 
     k++; 
     DigitOfOccurences = 0; 
     LengthOfOccurences = 0; 
    } 
    else { 
     year.at(DigitOfOccurences) = line.at(i); 
     i++; 
     LengthOfOccurences++; 
    } 
} 

int m = 0; 
int LengthOfLine = line.length(); 

while (i < LengthOfLine) { 
    total.at(m) = line.at(i); 
    m++; 
    i++; 
} 

baby.total = std::stoi(total); 

return baby; 
} 
+0

どういう意味ですか –

+0

長さを確認する前に 'line'からたくさんの文字を読んでいます。一見すると、 'line.at(i)'コールは、カンマが100個未満の場合は 'line'の最後まで実行されないようです。あなたは 'line'の終わりに達します。 –

+0

@Reneの改善を加えてください。あなたは 'i'変数を増やしており、この命令の1つは範囲外です。あなたはそれを制限する必要があります。コードをチェックした後、私は 'year.at(DigitOfOccurences)= line.at(i);'という行もまた問題を引き起こしていると確信しています。それを書き直してください。 – Fr333du

答えて

-1

ある構造体

struct baby_type { 

std::string name; 
std::vector<int> yearsCount; 
    int total; 
} ; 

です。 std :: stringsはそのようには動作しません。 あなたの最初のwhileループでは、

name.append(1,line.at(i)); 

使用単純なのstd ::パラメータとして単に文字で追加がないため、「1」が必要です。

+0

'push_back'についてはどうですか? – Rakete1111

+0

これは使用できます。 – Rene

関連する問題