2011-07-14 11 views
1

文字列イテレータを使用して文字列から数値を抽出するためにこのコードを書いています。 イテレータは、最初の番号をピックアップし、それを1日と呼びます。 なぜそれはそうですか?イテレータは数字全体を読み込むことになっていますが、最初の数字だけを読みます。

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

int main() 
{ 
string myAge = "I am 23 years old"; 
string::iterator iterator; 
char numberInCharacterForm; 
string numberInStringForm; 
stringstream convertToString; 
for(iterator = myAge.begin();iterator!=myAge.end();iterator++) 
{ 
       numberInCharacterForm = *iterator; 
       if(numberInCharacterForm >= '0' & numberInCharacterForm <='9') 
       { 
       convertToString << numberInCharacterForm; 
       convertToString >> numberInStringForm; 
       } 
} 
cout << numberInStringForm <<endl; 
getch(); 
return 0; 
} 

出力は2です。

+0

あなたは代わりに '&' の16行目に '&&' を望むことでしょう、ところで – Schnommus

答えて

1

だけstringstreamに文字を収集し、その後、それを印刷:

for(iterator = myAge.begin();iterator!=myAge.end();iterator++) 
{ 
    numberInCharacterForm = *iterator; 
    if(numberInCharacterForm >= '0' && numberInCharacterForm <='9') { 
     // note: && instead of & here^
     convertToString << numberInCharacterForm; 
    } 
} 
cout << convertToString.str() <<endl; 

文字列を手動で反復する必要はないが:

string myAge = "I am 23 years old"; 
string numberInStringForm; 
std::remove_copy_if(myAge.begin(), myAge.end(), 
        std::back_inserter(numberInStringForm), 
        std::not1(std::ptr_fun(isdigit))); 
std::cout << numberInStringForm << std::endl; 
+0

ただ文字Iを集めますnを文字列ストリームに変換し、それを後で印刷します。< - ええ、私はこの質問を投稿した直後にこれを行いました。 あなたの答えは素晴らしいです!どうもありがとう! –

1

あなたstringstream convertToStringを使用する必要はありません。 。あなたの問題がでこっそりする場合それはですので、あなたは非常に我々だけで文字を扱うなく、実際の数字ているので、あなただけの文字列としてそれをすべて維持することができ、右のそれを使用していない:

int main() 
{ 
    std::string myAge = "I am 23 years old"; 
    std::ostringstream digits; 

    for(std::string::const_iterator iterator = myAge.begin(); 
     iterator != myAge.end(); 
     ++iterator) 
    { 
     const char numberInCharacterForm = *iterator; 
     if(isdigit(numberInCharacterForm)) 
     { 
     digits << numberInCharacterForm; 
     } 
    } 

    std::cout << digits.str() <<endl; 
    getch(); 
    return 0; 
} 

参考文献:

関連する問題