Проблема с разбитием строки

118
28 августа 2019, 00:30

Вроде бы изначально казалось что простое задание, но почему-то не получается добиться оптимального результата.

"Программа ждет ввода строки неограниченной длины. Затем программа ждет ввода символа. После чего она должна разбить первую строку в другие подстроки, используя второй параметр в виде разделителя и вывести на экран."

Могу скинуть свой кривой код:

std::string str;
std::cout << "Введите строку: ";
std::getline(std::cin, str);
char symb;
std::cout << "Введите разделяющий символ: ";
std::cin >> symb;
int check = 0;
std::vector<std::string> arr;
for (size_t i = 0; i < str.size(); i++)
{
    std::string temp = "";
    if (str[i] == symb && check == 0) { temp = str.substr(0, i); arr.emplace_back(temp); check=i; }
    if (str[i] == symb && check != i)           
    {
        int index = i;
        for (size_t j = i+1; j < str.size(); j++)
        {
            if (str[j] == symb)                 
            {   
                temp = str.substr(index + 1, j);
                arr.emplace_back(temp);
                break;
            }
            index++;
        }
    }
}

for (auto &el : arr)
{
    std::cout << el << std::endl;
}

Пожалуйста, помогите разобраться.

Answer 1

Получилось так:

int main(int argc, char** argv)
{
    std::string str = "Test string";
//  std::cout << "Введите строку: ";
//  std::getline(std::cin, str);
    char symb = 's';
//  std::cout << "Введите разделяющий символ: ";
//  std::cin >> symb;
    std::vector<std::string> arr;
    size_t last_index = 0;
    // Разбиваем по символу разделителю
    for (size_t i = 0; i < str.size(); i++)
    {
        if (str[i] == symb)
        {
            // В массив складываем подстроки и запоминаем индекс символа-разделителя, если найден
            arr.emplace_back(str.substr(last_index, i - last_index));
            last_index = i /*+ 1*/; // +1, если символ-разделитель не должен попадать в подстроки
        }
    }
    // Всё что осталось в строке - последний элемент, тоже закидываем в вектор
    arr.emplace_back(str.substr(last_index, str.size() - last_index));

    for (auto &el : arr)
    {
        std::cout << "[" << el << "]" << std::endl;
    }
    system("pause");
}

Вывод:

[Te]
[st ]
[string]

Или так:

[Te]
[t ]
[tring]
READ ALSO
Проблема при выводе ответа

Проблема при выводе ответа

Есть задача: в файле 20 чисел,и надо вывести:

106
Почему std::count() возвращает знаковое число?

Почему std::count() возвращает знаковое число?

Почему алгоритм std::count() возвращает difference_type, ведь это знаковое число, а количество вхождений чего-то во что-то может быть 0+, те

131
Алгоритм hypot для 3 и более элементов

Алгоритм hypot для 3 и более элементов

Существует ли аналог алгоритма std::hypot() для вектора с 3+ элементами в стандартной библиотеке? Если нет, то можно предложить подобный по функционалу...

133
Stak around the variable was corrupted

Stak around the variable was corrupted

Такая вот проблема, пишу алгоритм для расчёта полинома Ньютона и сталкиваюсь с этой ошибкой

140