С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/48: Рейтинг темы: голосов - 48, средняя оценка - 4.94
13 / 13 / 10
Регистрация: 23.08.2015
Сообщений: 131

Найти первое вхождение символа в строке

12.10.2016, 02:41. Показов 9710. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задана числовая строка с разделительным знаком (&) где то посередине. Мне надо получить числа в строке до этого знака, путём нахождения его первого входа.

Т.к. команда strchr показывает этот символ и те что после него, я подумал вычитать строки, но не нашёл никакой толковой информации об этом. Как можно реализовать вывод символов до искомого знака?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2016, 02:41
Ответы с готовыми решениями:

Функция удаляющая первое и последнее вхождение в строке заданного символа
Функция удаляет первое и последнее вхождение в строке заданного символа.

Определить первое вхождение символа "d" в строке и вывести слово, в котором оказался этот символ.
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить первое вхождение символа “d” в строке и вывести слово, в котором...

Найти n-е вхождение символа в строке
unsigned char cArr = {'a','b','c','d','G','Э','Ю','я','ы','G','й','ц','у','к','G','Г','К','а','л','G','Э','Ю','я','ы',0}; String st =...

17
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 04:06
Цитата Сообщение от neketsh Посмотреть сообщение
Как можно реализовать вывод символов до искомого знака?
По-разному можно. Какие средства можно использовать? STL? Вариант на Си:
C++
1
2
3
4
    char str[] = "12345&6789";
    char* p = strtok(str, "&");
    if (p)
        printf("%s\n", str);
Добавлено через 4 минуты
Без строковых функций:
C++
1
2
3
4
    char str[] = "12345&6789";
    for (size_t i = 0; i < strlen(str) && str[i] != '&'; ++i)
        std::cout << str[i];
    std::cout << std::endl;
0
12.10.2016, 10:00

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
i < strlen(str)
Срочно в музей!

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 10:05
Croessmah, что не так?
0
12.10.2016, 10:08

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
Croessmah, что не так?
strlen в цикле ж :)

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 10:12
И что?
0
12.10.2016, 10:18

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
И что?
В музей надо.

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 10:20
Поясни. То, что при каждой итерации вызывается? Или что не так?
0
12.10.2016, 10:21

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
То, что при каждой итерации вызывается?
Именно это я и имел ввиду.

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 11:08
Цитата Сообщение от Croessmah Посмотреть сообщение
Именно это я и имел ввиду
На тебе тогда за это, из "Базовый курс" Липпмана.
Миниатюры
Найти первое вхождение символа в строке  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.10.2016, 11:10
Цитата Сообщение от nd2 Посмотреть сообщение
На тебе за это, из "Базовый курс" Липпмана.
На тебе: s.size() != strlen(str)
Это из простой человеческой логики.
Если s - std::string, то там вообще size за O(1).
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 11:11
А разница? Тебе же не понравилось, что на каждой итерации вызывается?
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от nd2
То, что при каждой итерации вызывается?

Именно это я и имел ввиду.
И здесь на каждой итерации вызывается.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.10.2016, 11:13
Цитата Сообщение от nd2 Посмотреть сообщение
Тебе же не понравилось, что на каждой итерации вызывается.
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
Цитата Сообщение от nd2 Посмотреть сообщение
И здесь на каждой итерации вызывается.
size - сразу возвращает размер.

Вопросы по разнице еще имеются?
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 11:31
Цитата Сообщение от Croessmah Посмотреть сообщение
Вопросы по разнице еще имеются?
Нет.

Добавлено через 8 минут
Мог бы я тебе,конечно, ещё пример из Прата привести, но смысла нет: всё равно
Цитата Сообщение от Croessmah Посмотреть сообщение
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
С этим не поспоришь...
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.10.2016, 11:34
Цитата Сообщение от nd2 Посмотреть сообщение
С этим не поспоришь...
Поспорить можно только теоретически.
Возможно, компилятор сможет сам
хешировать значение размера и не дергать каждый раз strlen,
но надеяться на это как-то не правильно.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 11:35
Цитата Сообщение от Croessmah Посмотреть сообщение
но надеяться на это как-то не правильно.
Согласен.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
12.10.2016, 11:36
Кстати, вот действительно без "строковых функций":
C++
1
2
3
4
   char str[] = "12345&6789";
    for (char *pC = str; *pC && *pC != '&'; ++pC)
        std::cout << *pC;
    std::cout << std::endl;
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
12.10.2016, 12:59
Цитата Сообщение от Croessmah Посмотреть сообщение
Кстати, вот действительно без "строковых функций":
C++
1
2
3
4
    char str[] = "12345&6789";
    for (int i = 0; str[i] && str[i] != '&'; ++i)
        std::cout << str[i];
    std::cout << std::endl;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2016, 12:59
Помогаю со студенческими работами здесь

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Первое вхождение символа в строку. С++
Для данного рядка оставить только первые вхождения каждого символа в ряд, и вывести результаты на экран. Заранее спасибо за помощь ))

Определить первое вхождение символа в строку
Буду очень благодарна, если поможете Дано предложение. Определить, есть ли буква а в нём. В случае положительного ответа найти также...

В слове заменить на РОВ первое вхождение символа С
Введите слово и замените на РОВ первое вхождение С, если такое есть. (буквы на русском языке) Вот я написала код, но он выдает ошибку...

Заменить в строке S первое вхождение строки
Даны строки S, S1 и S2. Заменить в строке S первое вхождение строки S1 на строку S2. Тут заменяются все вхождения а как сделать чтоб...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru