Ik probeer een tekenreeks te plaatsen die wordt gescheiden door spaties in een reeks snaren zonder met behulp van vector in C++. Bijvoorbeeld:
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;
}
}
Ik wil dat de uitgang is:
test
one
two
three.
Ik weet dat er al andere vragen zijn die string & gt vragen; Array in C++, maar ik kon geen antwoord vinden die aan mijn voorwaarden voldoet: het splitsen van een string in een array zonder vector te gebruiken.
Antwoord 1, Autoriteit 100%
Het is mogelijk om de touw in een stroom te draaien met behulp van de std::stringstream
klasse (de constructor neemt een string als parameter). Nadat het is gebouwd, kunt u de >>
-operator erop gebruiken (zoals op reguliere bestanden gebaseerde streams), die uithaalt, of Tokenize Word van IT:
#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;
}
}
Antwoord 2, Autoriteit 10%
#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;
}
Antwoord 3, Autoriteit 5%
#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;
}
Antwoord 4
Hier is een suggestie: gebruik twee indices in de tekenreeks, zeg start
en end
. start
verwijst naar het eerste teken van de volgende tekenreeks die moet worden geëxtraheerd, end
verwijst naar het teken na het laatste teken dat behoort tot de volgende tekenreeks die moet worden geëxtraheerd. start
begint bij nul, end
krijgt de positie van het eerste teken na start
. Dan neem je de string tussen [start..end)
en voeg je die toe aan je array. Je gaat door totdat je het einde van de snaar raakt.
Antwoord 5
#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;
}
Uitvoer:-
split
op
witruimte