Как получить строки, пока не найдется место - PullRequest
0 голосов
/ 10 апреля 2020

Здравствуйте, как получить все строки, пока не найдете пробел, и push_back слова до пробела во втором повороте Для l oop, чтобы начать получать все строки после пробела и снова, пока не найти пробел, это мой код

для Например, это предложение . [0] == 'bbbb' ve c. [1] == 'aaaa' ve c. [2] == 'f' ve c. [3] == 'ffg'

Спасибо за продвинутый

это мои 2 кода, оба не работают

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){

    string sentece;
    getline(cin, sentece);
    vector<char> words;

    for (int i = 0; i < sentece.size(); ++i)
    {
        while (sentece.substr(i, ' '))
        {
            if(isalpha(sentece.at(i)))
            {
                words.push_back(sentece.at(i));

            }
        }
    }
    cout << words[0] << '\n';
    cout << words[1] << '\n';
    cout << words[2] << '\n';

    for(const auto& a : words)
    {
        cout << a;
    }

        return 0;
}

//==================================================================


#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){

    string sentece;
    getline(cin, sentece);
    vector<char> words;

    for (int i = 0; i < sentece.size(); ++i)
    {
        while (sentece.at(i) != ' ')
        {
            if(isalpha(sentece.at(i)))
            {
                words.push_back(sentece.at(i));

            }
            if(sentece.at(i) == ' ')
            {
                break;
            }
        }
    }

     cout << words[0] << '\n';
    cout << words[1] << '\n';
    cout << words[2] << '\n';

    for(const auto& a : words)
    {
        cout << a;
    }


        return 0;
}

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Я полагаю, что этот код должен дать вам ответ, который вы хотите:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string test = "5bbbb3 1f a0aaa f1fg3";
    vector<string> words;

    for (int i = 0; i < test.size(); i++)
    {
        string tmp = "";
        while (test[i] != ' ' && i < test.size())
        {
            if (isalpha(test.at(i))){
                tmp += test[i];
            }
            else if (test.at(i) == ' ')
            {
                i++;
                break;
            }
            i++;
        }
        words.push_back(tmp);
    }

    cout << words[0] << '\n';
    cout << words[1] << '\n';
    cout << words[2] << '\n';
    cout << words[3] << '\n';
}

Все, что вам нужно сделать, - это заменить тестовое предложение введенным пользователем. Вы забыли увеличить i в то время как l oop, так что каждый раз он проверял один и тот же символ и бесконечно застревал.

Я пытался использовать как можно больше вашего исходного кода, поэтому не думайте, что это наиболее эффективное или элегантное решение проблемы

Надеюсь, это поможет:)

0 голосов
/ 10 апреля 2020

Вы можете использовать массив символов с scanf () `

#include<bits/stdc++.h>
    using namespace std;
    int main()
   {
       char s[1000];
       scanf("%[^' ']%s", s);
       cout<<s;
   }

Это прекратит принимать ввод до тех пор, пока вы не нажмете ввод, но сохранит строку до первого пробела.

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