C ++:将字符串分割为一个数组(C++: splitting a string into an a

2019-08-31 07:18发布

我试图插入由空格分隔成一个字符串数组的字符串在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 ++的问题。 我意识到这可能是一个重复的问题,但我找不到我的满足条件(将字符串分割阵列时不使用矢量)任何回答。 我在先进的道歉,如果这是一个重复的问题。

Answer 1:

有可能通过使用转串入一个流std::stringstream类(它的构造采用字符串作为参数)。 一旦它的建成,可以使用>>上操作(如定期基于文件流),这将提取,或从标记化词:

#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;
    }
}


Answer 2:

#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;
}


Answer 3:

#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;
}


Answer 4:

不重要的:

const vector<string> explode(const string& s, const char& c)
{
    string buff{""};
    vector<string> v;

    for(auto n:s)
    {
        if(n != c) buff+=n; else
        if(n == c && buff != "") { v.push_back(buff); buff = ""; }
    }
    if(buff != "") v.push_back(buff);

    return v;
}

打开链接



Answer 5:

这里有一个建议:用两个指数为字符串,比如startendstart指向下一个字符串中提取的第一个字符end属于下一个字符串中提取最后一个后点的字符。 start在零开始, end获得后的第一个字符的位置start 。 然后你把之间的串[start..end)并添加到您的阵列。 你继续下去,直到你打的字符串的结尾。



文章来源: C++: splitting a string into an array