以下のこの関数は、64ビット整数で埋められている文字列を取得し、各値は区切り文字で区切られ、ベクトルに入れられます。
vector<unsigned long long int> getAllNumbersInString(string line, char delim){
vector<unsigned long long int> v;
string word;
stringstream stream(line);
unsigned long long int num;
while(getline(stream, word, delim))
num = atol(word.c_str());
v.push_back(num);
}
return v;
}
この関数は、たとえば、区切り文字として「、」がある場合は正常に機能しますが、文字列変数「line」のデータが次のようになっている場合、区切り文字は失敗します。
432 12332 2234 12399
データは区切り文字として空白を使用しているように見えますが、上記のコードでは、コード全体が論理的に失敗します。たとえば、空白の間の空白は未定義であり、atolは0を返し、これらのゼロをベクトルに入れます。
これらの異常をよりよく防ぐために、このコードにどのような対策を講じる必要がありますか?