在循环中检测字符串参数

时间:2009-07-29 20:35:55

标签: c++

程序使用getline获取一个字符串,然后将该字符串传递给一个函数,在该函数中将字符串存储到由空格分隔的子字符串中。我只是通过循环读取字符来做到这一点。

但是,现在我正在尝试传递第二个字符串参数,如果循环遇到第二个字符串参数中的字符,则将字符串分隔为子字符串。这是我到目前为止所做的。

#include "std_lib_facilities.h"

vector<string> split(const string& s, const string& w) // w is second argument
{
    vector<string> words;
    string altered;
    for(int i = 0; i < s.length(); ++i)
    {
        altered+=s[i];
        if(i == (s.length()-1)) words.push_back(altered);
        else if(s[i] == ' ')
        {
            words.push_back(altered);
            altered = "";
        }
    }

    return words;
}



int main()
{
    vector<string> words;
    cout << "Enter words.\n";
    string word;
    getline(cin,word);
    words = split(word, "aeiou"); // this for example would make the letters a, e, i, o,
                                  // and u divide the string
    for(int i = 0; i < words.size(); ++i)
            cout << words[i];
    cout << endl;
    keep_window_open();
}

然而,显然我不能做像

这样的事情
if(s[i] == w)

因为s [i]是char而w是字符串。我是否需要使用字符串流来解析字符串而不是我实现的循环?我实际上玩过stringstream,但实际上并不知道它是如何帮助的,因为无论哪种方式我都必须逐个读取字符。

P.S。 split的参数必须作为字符串传递,main()中的输入形式必须是getline。

2 个答案:

答案 0 :(得分:6)

看看std::string::find_first_of。这允许您轻松地向std :: string对象询问另一个字符串对象中下一个字符的位置。

例如:

string foo = "This is foo";
cout << foo.find_first_of("aeiou"); // outputs 2, the index of the 'i' in 'This'
cout << foo.find_first_of("aeiou", 3); // outputs 5, the index of the 'i' in 'is'

编辑:哎呀,错误的链接

答案 1 :(得分:0)

您可以使用 strtok 来实现此目的。它已在STL库中实现。

#include 
#include 

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}