-5

重複の可能性:
文字列内の特定の単語に到達する

私は非常によく似た質問をしましたが、どうやら私の質問が間違っていたようです。問題は、C++ で文字列の 3 番目の単語に到達する必要があることです。文字列は次のようになります。

word1\tword2\tword3\tword4\tword5\tword6

word2 にはスペースを含めることができます。

文字列を 1 文字ずつ読み取ろうとしましたが、効率が悪いことがわかりました。コードを試してみました

std::istringstream str(array[i]); 
str >> temp >> temp >> word; 
array2[i] = word; 

word2内のスペースのために機能しませんでした。

どうすればそれができるか教えていただけますか?

4

2 に答える 2

1

最も簡単な方法:

#include <iostream>
int main()
{
    //input string:
    std::string str = "w o r d 1\tw o r d2\tword3\tword4";
    int wordStartPosition = 0;//The start of each word in the string

    for( int i = 0; i < 2; i++ )//looking for the third one (start counting from 0)
        wordStartPosition = str.find_first_of( '\t', wordStartPosition + 1 );

    //Getting where our word ends:
    int wordEndPosition = str.find_first_of( '\t', wordStartPosition + 1 );
    //Getting the desired word and printing:
    std::string result =  str.substr( wordStartPosition + 1, str.length() - wordEndPosition - 1 );
    std::cout << result;
}

出力:

word3
于 2012-07-13T12:39:22.610 に答える
0

次の例を試してください。あなたの 3 番目の単語は std::vector の 3 番目の項目です...

大きな文字列を std::vector オブジェクトに分割する分割文字列関数を作成します。その std::vector を使用して 3 番目の文字列を取得します。

次の例を参照してください。空の C++ コンソール プロジェクトで実行してみてください。

#include <stdio.h>
#include <vector>
#include <string>

void splitString(std::string str, char token, std::vector<std::string> &words)
{
    std::string word = "";
    for(int i=0; i<str.length(); i++)
    {
        if (str[i] == token)
        {
            if( word.length() == 0 )
                continue;

            words.push_back(word);
            word = "";
            continue;
        }

        word.push_back( str[i] );
    }
}


int main(int argc, char **argv)
{
    std::string stream = "word1\tword2\tword3\tword4\tword5\tword6";

    std::vector<std::string> theWords;
    splitString( stream, '\t', theWords);

    for(int i=0; i<theWords.size(); i++)
    {
        printf("%s\n", theWords[i].c_str() );
    }

    while(true){}
    return 0;
}
于 2012-07-13T12:39:36.207 に答える