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

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

12.10.2016, 02:41. Показов 9751. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru