2012-01-28 12 views
0

私はsubstr()機能を使用していますが、機能しません。私のコードはサブストリング改行

std::string s1 = ".V/123\n" 
      ".V/233\n"; 

std::string ss; 
if(s1.substr(0,3) == ".V/") 
{ 
    ss = s1.substr(3); 

    std::cout << ss; 
} else { 
    std::cout << "INCORRECT" << std::endl; 
} 

を下回っている出力は、それはすべきではない123.V/123

です:

123 
123 

私が間違って下さいつもりどこ誰かが教えてもらえますか?

+4

のようなものは、あなたのコード内で何秒 '・V /'を削除する可能性が何をしたいのですか? (そして、それは私が得られる出力ではありません。新しい行があります) – Mat

+0

また、2行目の文字列は123ではなく233です。それは間違いですか、それとも意図したのでしょうか? – nycynik

答えて

0

文字列には2行が含まれています。 ".V/123 \ n" ".V/223 \ n"を実行すると、 ".V/123 \ n.V/223 \ n"と同じ動作をします。別々の変数や配列に分割してください。あなたのsubstr(3)がしていることは、文字列内のすべての文字を4番目の文字から最後まで抽出しているため、 'ss'は "123 \ n.V/223 \ n"に設定されています。これはあなたが見ているものです。

この

std::string s1[2] = { ".V/123\n", ".V/233\n"}; 

    std::string ss; 
    for (int i = 0; i < 2; ++i) { 
    if (s1[i].substr(0,3) == ".V/") { 
     ss = s1[i].substr(3); 

     std::cout << ss; 
    } else { 
     std::cout << "INCORRECT" << std::endl; 
    } 
    } 
0
ss = s1.substr(3).substr(0,3); 

これは私が見

+0

いいえ - これは1つの123だけを印刷しますが、123の文字を含む2つの別々の行があると思います(理由は分かりません) –

1

最初の奇妙なことは、あなたがちょうどそれが".V/123\n"になりたい場合は、あなたのようにそれを宣言する必要があり、S1

std::string s1 = ".V/123\n" 
     ".V/233\n"; 

の初期化です動作するはずです:

std::string s1 = ".V/123\n"; 

2番目の奇妙なことは、substrの2番目の呼び出しであり、位置を定義するだけなので、g文字列の終わりまでの位置から、それが広告されたように動作するようにします。私はあなたのための参照を以下に追加しました。

参照:あなたのコードから http://www.cplusplus.com/reference/string/string/substr/

+1

2行に分かれた文字列はどうですか? – Shahbaz

+0

@nycynik - プリプロセッサは、異なる行にある場合でも、隣接する文字列リテラルを連結します。 –

+0

この短い文字列では、私はそれを行う理由は見当たりませんし、間違いかもしれないと考えました。 – nycynik

1

出力は次のようになります。

123 
.V/233 
<empty line> 

と、これはまさに、それは私のマシンに印刷するものです。 まず、2番目の3桁の数字は123ではなく、233であることに注意してください。すべてのsubstr(3)はそうです:文字列の最初の3文字を削除します。 .V /を削除する必要はありません。