Вроде бы изначально казалось что простое задание, но почему-то не получается добиться оптимального результата.
"Программа ждет ввода строки неограниченной длины. Затем программа ждет ввода символа. После чего она должна разбить первую строку в другие подстроки, используя второй параметр в виде разделителя и вывести на экран."
Могу скинуть свой кривой код:
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;
}
Пожалуйста, помогите разобраться.
Получилось так:
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]
Виртуальный выделенный сервер (VDS) становится отличным выбором
Почему алгоритм std::count() возвращает difference_type, ведь это знаковое число, а количество вхождений чего-то во что-то может быть 0+, те
Существует ли аналог алгоритма std::hypot() для вектора с 3+ элементами в стандартной библиотеке? Если нет, то можно предложить подобный по функционалу...
Такая вот проблема, пишу алгоритм для расчёта полинома Ньютона и сталкиваюсь с этой ошибкой