2016-05-19 10 views
-2

これはいくつかのための非常に明白な質問かもしれませんが、私はこのエラーでどこから始めるべきか分かりません。C++のstoiは時々スペースを含む例外を送信します

私はいくつかの文字列を.txtファイルから読み込み、すべての文字列に ":"がついています。例:色あたり

オブジェクト:ロボットの1

量:10の

定義済み位置:1

I手で値を編集すると、STOIが正常に動作するが、AC#コード同じファイルに値を書き込みます(私は手でチェックしていますが、同じもの、余分なスペース、余分な文字、視覚的に違うものはありません)。私のコードは次である:

C++:

cout << "Number..." << endl; 
cout << dataLine.substr(dataLine.find_first_of(":")+1) << endl; 
try{ 
    cfgVals.push_back(stoi(dataLine.substr(dataLine.find_first_of(":")+1)));  
}catch(exception& ex){ 
    cout << ex.what() << endl; 
} 

は両方の場合において、データ線のCOUTは、次にスペースと番号 "1" または "10" を送信します。ファイルが私によって編集されるとき、stoiは例外をスローしませんが、他のプログラムによって編集されます(それにもかかわらず、とにかく変換​​権をとっているようです)。私はC#でファイルを書き込むために使用

コマンドは非常に簡単です:paramは文字列のリストがある

File.WriteAllLines(@nameFile, param); 

私は十分に、任意のアイデアを希望ですか?前もって感謝します!

+1

を持っている唯一の場所は、あなたがこれまでの文字エンコードについて考えるかであると仮定すると、仕事をすればよいですか?おそらくあなたの "C#"書き込みファイルを 'UTF-8'とし、 'stoi'が 'ASCII'を扱っていることを知っているでしょう –

+0

例外は何ですか?つまりex.what()は何を返しますか? –

+0

@ Freeman Zhang、あなたは何かまであるかもしれない...病気はそれを見ている。 – gkapellmann

答えて

1

C++プログラムの動作が入力ファイルを作成するプログラムによって異なる場合は、そのC#-programで使用されているエンコーディングとテキストプロセッサからファイルを保存するエンコーディングを確認する必要があります。このファイルを作成するC#-programのコードをここに送信することもできます。

+0

長いこと前に私はこの答えを得て、私はそれを修正することができました。実際には間違ったエンコーディングでした! – gkapellmann

0

はい、stoiは整数に変換できる入力がないと例外をスローします。空白文字は数字でも数字の一部でもかまいません。あなたは、入力にそれを与える前にスペースを取り除くことによって入力をトリミングすることができ、あなたの問題を解決するはずです。

string trim(string num) 
{ 
    string res = ""; 
    if (num[0] == ' ') { 
    res = num.substr(1); 
    } 
    return res; 
} 

これは前に、あなたがスペース文字

関連する問題