Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 2 / 0
Регистрация: 15.11.2017
Сообщений: 36
1

Как разделить строку по символу, вводимому с клавиатуры

11.07.2021, 21:18. Показов 4908. Ответов 10

Author24 — интернет-сервис помощи студентам
Мне нужно вводить строку с клавиатуру, а потом вводить разделитель, и чтобы программа затем разделяла первоначальную строку на несколько по разделителю, введенному с клавиатуры.

Хотел использовать strtok, но я так понял, strtok работает только с заданными символами, которые мы определяем до запуска программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
#include <iostream>
 
using namespace std;
 
int main()
 
{
    setlocale(LC_ALL, "Russian"); // включение русского языка в консоли
    char str;
    char* token;
    cout << "Введите строку: ";
    cin >> str;
    cout << "Введите разделитель: ";
    cin >> token;
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, token);
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2021, 21:18
Ответы с готовыми решениями:

как разделить строку на масив по символу?
добрый день. Подскажите пожалуйста как, например , разбить строку &quot;а1.бвфы.в2.гке&quot; по точке, чтоб...

Как в lua разделить строку по символу в массив?
Хотя можно и не в массив, а просто в отдельные переменные, что бы потом с ними работать. В c# мне...

Разделить строку по символу
В птоне есть функция split(х) которая делит строку по символу х. Можно ли указать аргумент функции...

Разделить строку на 2 (по определенному символу)
добрый день как можно разделить строку на 2 строки через знак например разделитель знак : и...

10
Модератор
Эксперт CЭксперт С++
5174 / 2896 / 1501
Регистрация: 14.12.2018
Сообщений: 5,233
Записей в блоге: 1
11.07.2021, 21:33 2
Лучший ответ Сообщение было отмечено krutosh как решение

Решение

krutosh, пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // включение русского языка в консоли
    char str[500];
    cout << "Введите строку: ";
    cin.getline(str, sizeof(str));
 
    char delv[10];
    cout << "Введите разделитель: ";
    cin.getline(delv, sizeof(delv));
 
    char* token = strtok(str, delv);
    while (token != NULL)
    {
        printf("%s\n", token);
        token = strtok(NULL, delv);
    }
    return 0;
}
2
1 / 2 / 0
Регистрация: 15.11.2017
Сообщений: 36
11.07.2021, 22:49  [ТС] 3
Спасибо, заработало! Получается, вы просто ввели новую переменную для хранения в ней разделителя?
0
Модератор
Эксперт CЭксперт С++
5174 / 2896 / 1501
Регистрация: 14.12.2018
Сообщений: 5,233
Записей в блоге: 1
11.07.2021, 22:55 4
krutosh, да, новая переменная delv используется для хранения разделителя.
1
1 / 2 / 0
Регистрация: 15.11.2017
Сообщений: 36
11.07.2021, 23:29  [ТС] 5
А я могу вместо char использовать String?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
11.07.2021, 23:42 6
Цитата Сообщение от Volga_ Посмотреть сообщение
переменная delv используется для хранения разделителя
это не переменная, а массив. который однозначно не нужен:
Цитата Сообщение от krutosh Посмотреть сообщение
Как разделить строку по символу
0
1 / 2 / 0
Регистрация: 15.11.2017
Сообщений: 36
11.07.2021, 23:45  [ТС] 7
Но теперь то разделение по вводимому символу есть
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
11.07.2021, 23:58 8
Цитата Сообщение от krutosh Посмотреть сообщение
могу вместо char использовать String?
так подойдёт ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;
 
int main()
{
    string s, lex;
    cout << "String:\n";
    getline(cin, s);    
 
    char delim;
    cout << "delimiter: "; cin >> delim;
    
    stringstream in(s);
    while (getline(in, lex, delim))
    {       
        cout << lex << "\n";
    }
 
    system("pause");
    return 0;
}
1
Модератор
Эксперт CЭксперт С++
5174 / 2896 / 1501
Регистрация: 14.12.2018
Сообщений: 5,233
Записей в блоге: 1
12.07.2021, 00:00 9
Цитата Сообщение от krutosh Посмотреть сообщение
А я могу вместо char использовать String?
Да, можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream> 
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // включение русского языка в консоли
 
    string str;
    cout << "Введите строку: ";
    getline(cin, str);
 
    string delims;
    cout << "Введите разделитель: ";
    getline(cin, delims);
 
    size_t beg, pos = 0;
    while ((beg = str.find_first_not_of(delims, pos)) != string::npos)
    {
        pos = str.find_first_of(delims, beg + 1);
        cout << str.substr(beg, pos - beg) << endl;
    }
 
    return 0;
}
0
1 / 2 / 0
Регистрация: 15.11.2017
Сообщений: 36
12.07.2021, 00:18  [ТС] 10
Yetty, да, спасибо!

Добавлено через 1 минуту
Volga_, спасибо!

Добавлено через 11 минут
Yetty, а в Вашем варианте получается, две переменные типа string, одна для начального текста, а вторая для разделенного? Я просто не опытный в с++, но хочу разобраться. stringstream у Вас используется для чтения данных из строки?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
12.07.2021, 00:48 11
Цитата Сообщение от krutosh Посмотреть сообщение
две переменные типа string, одна для начального текста, а вторая для разделенного?
примерно так
Цитата Сообщение от krutosh Посмотреть сообщение
stringstream у Вас используется для чтения данных из строки?
сначала строка читается, затем помещается в строковый поток stringstream после чего читается поток с помощью getline, но разделитель уже задан явно. когда изначально читаете строку с помощью getline третьего параметра нет - в этом случае разделитель по умолчанию \n

Добавлено через 9 минут
Цитата Сообщение от krutosh Посмотреть сообщение
Но теперь то разделение по вводимому символу есть
разделитель - это один символ. для хранения одного символа массив не нужен
1
12.07.2021, 00:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2021, 00:48
Помогаю со студенческими работами здесь

Разделить строку на подстроки по заданному символу
1.Вводится строка, выбирается символ и по этому символу строка делится на несколько частей ...

Разделить строку на части по указанному символу
Есть строка string, как ее поделить по конкретному символу на части, и эти части присвоить другим...

Вывести строку из файла по вводимому с клавиатуры номеру
У меня есть задание, ввести строки в текстовый файл, что я и сделал, и второе задание, это вывести...

Как удалить строку из файла по вводимому пользователем критерию?
Как удалить строку из файла, которая начинается с номера, который я ввожу, информация из одного...

Как разрезать строку по символу
Как разрезать строку по символу. Есть строка string S = &quot;Value1 : Value2 : Значение 3&quot; Причем...

Xml C# поиск значения по вводимому с клавиатуры
Есть заранее созданный xml документ. Мы его читаем, выводим в консоль. Ищем элемент по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru