2017-11-30 55 views
-2

コンマを取り除いてsecondWordに2番目の単語を格納しようとしていて、secondWordを出力しようとしています。2番目の単語の抽出。文字列の解析(C++)

私のコード:

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

int main() 
{ 
    istringstream inSS;  
    string lineString;   
    string firstWord;   
    string secondWord;  
    int i; 
    bool correct = false; 

    cout << "Enter input string:" << endl; 

    while (!correct) 
    { 
     // Entire line into lineString 
     getline(cin, lineString); 

     // Copies to inSS's string buffer 
     inSS.clear(); 
     inSS.str(lineString); 

     // Now process the line 
     inSS >> firstWord; 

     // Output parsed values 
     if (firstWord == "q") 
     { 
      cout << "q" << endl; 
      correct = true; 
     } 

     inSS >> secondWord; 
     if(secondWord[i] != ',') 
     { 
      cout<<"Error: No comma in string."<<endl; 
     } 

     else if (secondWord[i] == ',') 
     { 

      cout << "First word: " << firstWord << endl; 
      cout << "Second word: " << secondWord << endl; 
      cout << endl; 
     } 
    } 

    return 0; 
} 

許容入力: ジル、アレン ジル、アレン ジル、アレン

expected output

コードは2番目の単語としてコンマを生成するが、Iコンマとスペースを取り除き、2番目の単語を削除したいと考えています。

+0

私は初期化されていないようです – lamandy

+0

とにかく、あなたはこの質問を見ることができます:https://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c tokenizeは文字列です。 – lamandy

+0

私が初期化されていない場合、コードの動作は未定義となり、何かが起こる可能性があります。とにかく、サンプル入力を提供する必要があります。 'a、b'、' a、b'、 'a、b'はあなたのコードを使って非常に異なる結果を生み出すことができます。 – lamandy

答えて

0
vector<string> tokenize(const string& line, const string& delimiters) 
{ 
    int start = 0, end = 0; 
    vector<string> result; 
    while (end != string::npos) 
    { 
     start = line.find_first_not_of(delimiters, end); 
     end = line.find_first_of(delimiters, start); 
     if (start != string::npos && end != string::npos) 
      result.push_back(line.substr(start, end - start)); 
     else if (start != string::npos) 
      result.push_back(line.substr(start)); 
     else 
      break; 
    } 
    return result; 
} 

このメソッドは、区切り記号で区切られたトークンを返します。区切り文字が", "の場合は、その間にコンマがあることを確認する必要があります。区切り文字が","の場合は、各単語の先頭と末尾に空白をトリムする必要があります。

関連する問題