26

我正在尝试将由空格分隔的字符串插入到字符串数组中,而不在 C++ 中使用向量。例如:

using namespace std;
int main() {
    string line = "test one two three.";
    string arr[4];

    //codes here to put each word in string line into string array arr
    for(int i = 0; i < 4; i++) {
        cout << arr[i] << endl;
    }
}

我希望输出为:

test
one
two
three.

我知道在 C++ 中已经有其他问题询问字符串 > 数组,但我找不到任何满足我的条件的答案:将字符串拆分为数组而不使用向量。

4

5 回答 5

48

可以使用std::stringstream类将字符串转换为流(其构造函数将字符串作为参数)。构建完成后,您可以>>在其上使用运算符(例如在基于常规文件的流上),它将从中提取或标记单词:

#include <iostream>
#include <sstream>

using namespace std;

int main(){
    string line = "test one two three.";
    string arr[4];
    int i = 0;
    stringstream ssin(line);
    while (ssin.good() && i < 4){
        ssin >> arr[i];
        ++i;
    }
    for(i = 0; i < 4; i++){
        cout << arr[i] << endl;
    }
}
于 2013-04-16T05:41:49.957 回答
4
#include <iostream>
#include <sstream>
#include <iterator>
#include <string>

using namespace std;

template <size_t N>
void splitString(string (&arr)[N], string str)
{
    int n = 0;
    istringstream iss(str);
    for (auto it = istream_iterator<string>(iss); it != istream_iterator<string>() && n < N; ++it, ++n)
        arr[n] = *it;
}

int main()
{
    string line = "test one two three.";
    string arr[4];

    splitString(arr, line);

    for (int i = 0; i < 4; i++)
       cout << arr[i] << endl;
}
于 2013-04-16T06:53:25.710 回答
2
#define MAXSPACE 25

string line =  "test one two three.";
string arr[MAXSPACE];
string search = " ";
int spacePos;
int currPos = 0;
int k = 0;
int prevPos = 0;

do
{

    spacePos = line.find(search,currPos);

    if(spacePos >= 0)
    {

        currPos = spacePos;
        arr[k] = line.substr(prevPos, currPos - prevPos);
        currPos++;
        prevPos = currPos;
        k++;
    }


}while( spacePos >= 0);

arr[k] = line.substr(prevPos,line.length());

for(int i = 0; i < k; i++)
{
   cout << arr[i] << endl;
}
于 2013-04-16T06:09:24.537 回答
0

这是一个建议:在字符串中使用两个索引,比如startendstart指向下一个要提取的字符串的第一个字符,end指向属于下一个要提取的字符串的最后一个字符之后的字符。start从零开始,end获取 之后的第一个字符的位置start。然后你把字符串[start..end)添加到你的数组中。您继续前进,直到击中字符串的末尾。

于 2013-04-16T05:24:37.907 回答
0
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

int main() {

    string s1="split on     whitespace";
    istringstream iss(s1);
    vector<string> result;
    for(string s;iss>>s;)
        result.push_back(s);
    int n=result.size();
    for(int i=0;i<n;i++)
        cout<<result[i]<<endl;
    return 0;
}

输出:-



空白处拆分

于 2019-11-08T17:48:24.580 回答