到达字符串中的第3个单词

时间:2012-07-13 12:23:06

标签: c++ string word

  

可能重复:
  Reaching a specific word in a string

我问了一个非常相似的问题,但显然我错了。问题是我需要在C ++中的字符串中找到第3个单词,字符串是这样的:

word1\tword2\tword3\tword4\tword5\tword6

word2里面可以有空格。

我试着逐个字符地读取字符串,但我发现它效率低下。我试过代码

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

由于word2中的空格而无效。

你能告诉我怎么做吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试以下示例。 你的第三个字是std :: vector中的第3个字......

创建一个拆分字符串函数,它将一个大字符串拆分为一个std :: vector对象。使用那个std :: vector来获取你的第三个字符串。

请参阅以下示例,尝试在空的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;
}