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

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

ここに提案があります: 文字列に 2 つのインデックス、たとえばstartと を使用しendます。start次に抽出する文字列の最初の文字をend指し、次に抽出する文字列に属する最後の文字の次の文字を指します。startゼロから開始し、endの後の最初の文字の位置を取得しstartます。次に、その間の文字列を取り、それを[start..end)配列に追加します。弦の端に到達するまで続けます。

于 2013-04-16T05:24:37.907 に答える