Разделить одну строку на две

253
28 января 2019, 13:30

Дана строка, в которой записаны две последовательности символов через пробел. Нужно разделить их на 2 отдельные строки, пробел удалить.

Пример ввода:

string1 = sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe

Пример вывода

string1 = sdkmaskmdawekqwemkqwekmqwekm
string2 = bqmekwmqwekmqewkqwemkkmwqe
Answer 1

Непонятно, через string или C-строки.

Итак, если известно, что пробел один...

Решение через строки C++.

string str = "sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe";
auto pos = str.find(" ");
if (pos != string::npos)
{
    string s1 = str.substr(0,pos);
    string s2 = str.substr(pos+1);
    cout << s1 << endl << s2 << endl;
}

Со строками C:

char str[] = "sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe";
char * c = strchr(str,' ');
if (c != 0)
{
    char s1[100], s2[100];
    strcpy(s1,str);
    s1[c-str] = 0;
    strcpy(s2,c+1);
    cout << s1 << endl << s2 << endl;
}

Естественно, это лишь одни из множества вариантов..

Answer 2

Если пробел один (и для результатов (sttring2 и string3) выделено достаточно памяти), то

sscanf(string1, "%s %s", string2, string3);

Если же требуется разделить строку string1 по первому пробелу и учесть вариант, когда нет ни одного пробела, то можно написать что-то в таком духе

 ....
 char *p = strchr(string1, ' ');
 if (p) {
   strncpy(string2, string1, p - string1);
   string2[p - string1] = 0;
   strcpy(string3, p + 1);
 } else {
   string3[0] = 0;
   strcpy(string2, string1);
 }
Answer 3

еще можно вот так:

#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main(){
    string s="sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe";
    stringstream ss(s);
    string s1,s2;
    getline(ss,s1,' ');
    getline(ss,s2,' ');
    cout<<s1<<"\n"<<s2;
}

можно написать это функцией что бы делила кучу слов сразу, передать надо саму строку и символ дележки:

#include <string>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
vector<string> split(string s,char delim){
    string temp="";
    stringstream ss(s);
    vector<string> vec;
    while(getline(ss,temp,delim)){
        if(temp.length()){
            vec.push_back(temp);
        }
    }
    return vec;
}
int main(){
    string s="sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe adadad, 123123";
    vector<string> ans;
    ans=split(s, ' ');
    for(const auto& a:ans)
    cout<<a<<"\n";
}
Answer 4
std::string s1 = "sdkmaskmdawekqwemkqwekmqwekm bqmekwmqwekmqewkqwemkkmwqe", s2, s3;
std::stringstream(s1) >> s2 >> s3;
READ ALSO
Нужно вычислить сумму с помощью циклa for

Нужно вычислить сумму с помощью циклa for

задано натуральное число n, нужно вычислить сумму S = (-1)^n * (n+1)/(2n+1) с помощью циклa for

207
Многопоточность в С++. В чем отличие pthread от std::thread?

Многопоточность в С++. В чем отличие pthread от std::thread?

В чем основные отличия posix threads и класса std::thread? В каком случае что выбрать и почему? Желательно, поподробнее

214
Умножение матриц по Винограду

Умножение матриц по Винограду

Пытаюсь сделать умножение матриц по Винограду, но как-то не очень получаетсяПрошу помощи у вас

246
C++ Матрица в классе

C++ Матрица в классе

Как поместить этот код в класс?

222