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

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

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

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

Т.к. команда strchr показывает этот символ и те что после него, я подумал вычитать строки, но не нашёл никакой толковой информации об этом. Как можно реализовать вывод символов до искомого знака?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2016, 02:41
Ответы с готовыми решениями:

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

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

Найти n-е вхождение символа в строке
unsigned char cArr =...

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

17
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 04:06 2
Цитата Сообщение от 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
Croessmah
12.10.2016, 10:00
  #3

Не по теме:

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

0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 10:05 4
Croessmah, что не так?
0
Croessmah
12.10.2016, 10:08
  #5

Не по теме:

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

0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 10:12 6
И что?
0
Croessmah
12.10.2016, 10:18
  #7

Не по теме:

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

0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 10:20 8
Поясни. То, что при каждой итерации вызывается? Или что не так?
0
Croessmah
12.10.2016, 10:21
  #9

Не по теме:

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

0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 11:08 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Именно это я и имел ввиду
На тебе тогда за это, из "Базовый курс" Липпмана.
Миниатюры
Найти первое вхождение символа в строке  
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
12.10.2016, 11:10 11
Цитата Сообщение от nd2 Посмотреть сообщение
На тебе за это, из "Базовый курс" Липпмана.
На тебе: s.size() != strlen(str)
Это из простой человеческой логики.
Если s - std::string, то там вообще size за O(1).
0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 11:11 12
А разница? Тебе же не понравилось, что на каждой итерации вызывается?
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от nd2
То, что при каждой итерации вызывается?

Именно это я и имел ввиду.
И здесь на каждой итерации вызывается.
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
12.10.2016, 11:13 13
Цитата Сообщение от nd2 Посмотреть сообщение
Тебе же не понравилось, что на каждой итерации вызывается.
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
Цитата Сообщение от nd2 Посмотреть сообщение
И здесь на каждой итерации вызывается.
size - сразу возвращает размер.

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

Добавлено через 8 минут
Мог бы я тебе,конечно, ещё пример из Прата привести, но смысла нет: всё равно
Цитата Сообщение от Croessmah Посмотреть сообщение
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
С этим не поспоришь...
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
12.10.2016, 11:34 15
Цитата Сообщение от nd2 Посмотреть сообщение
С этим не поспоришь...
Поспорить можно только теоретически.
Возможно, компилятор сможет сам
хешировать значение размера и не дергать каждый раз strlen,
но надеяться на это как-то не правильно.
0
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 11:35 16
Цитата Сообщение от Croessmah Посмотреть сообщение
но надеяться на это как-то не правильно.
Согласен.
0
Don't worry, be happy
17204 / 10081 / 1945
Регистрация: 27.09.2012
Сообщений: 25,158
Записей в блоге: 1
12.10.2016, 11:36 17
Кстати, вот действительно без "строковых функций":
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
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
12.10.2016, 12:59 18
Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2016, 12:59

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.