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

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

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

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

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2016, 02:41
Ответы с готовыми решениями:

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

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

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

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

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

17
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
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
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 10:05 #4
Croessmah, что не так?
0
Croessmah
12.10.2016, 10:08
  #5

Не по теме:

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

0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 10:12 #6
И что?
0
Croessmah
12.10.2016, 10:18
  #7

Не по теме:

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

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

Не по теме:

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

0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 11:08 #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Именно это я и имел ввиду
На тебе тогда за это, из "Базовый курс" Липпмана.
0
Миниатюры
Найти первое вхождение символа в строке  
Croessmah
++Ͻ
14367 / 8149 / 1534
Регистрация: 27.09.2012
Сообщений: 20,086
Записей в блоге: 3
Завершенные тесты: 1
12.10.2016, 11:10 #11
Цитата Сообщение от nd2 Посмотреть сообщение
На тебе за это, из "Базовый курс" Липпмана.
На тебе: s.size() != strlen(str)
Это из простой человеческой логики.
Если s - std::string, то там вообще size за O(1).
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 11:11 #12
А разница? Тебе же не понравилось, что на каждой итерации вызывается?
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от nd2
То, что при каждой итерации вызывается?

Именно это я и имел ввиду.
И здесь на каждой итерации вызывается.
0
Croessmah
++Ͻ
14367 / 8149 / 1534
Регистрация: 27.09.2012
Сообщений: 20,086
Записей в блоге: 3
Завершенные тесты: 1
12.10.2016, 11:13 #13
Цитата Сообщение от nd2 Посмотреть сообщение
Тебе же не понравилось, что на каждой итерации вызывается.
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
Цитата Сообщение от nd2 Посмотреть сообщение
И здесь на каждой итерации вызывается.
size - сразу возвращает размер.

Вопросы по разнице еще имеются?
1
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 11:31 #14
Цитата Сообщение от Croessmah Посмотреть сообщение
Вопросы по разнице еще имеются?
Нет.

Добавлено через 8 минут
Мог бы я тебе,конечно, ещё пример из Прата привести, но смысла нет: всё равно
Цитата Сообщение от Croessmah Посмотреть сообщение
strlen каждый раз проходит по строке в поисках '\0' для определения размера.
С этим не поспоришь...
0
Croessmah
++Ͻ
14367 / 8149 / 1534
Регистрация: 27.09.2012
Сообщений: 20,086
Записей в блоге: 3
Завершенные тесты: 1
12.10.2016, 11:34 #15
Цитата Сообщение от nd2 Посмотреть сообщение
С этим не поспоришь...
Поспорить можно только теоретически.
Возможно, компилятор сможет сам
хешировать значение размера и не дергать каждый раз strlen,
но надеяться на это как-то не правильно.
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
12.10.2016, 11:35 #16
Цитата Сообщение от Croessmah Посмотреть сообщение
но надеяться на это как-то не правильно.
Согласен.
0
Croessmah
++Ͻ
14367 / 8149 / 1534
Регистрация: 27.09.2012
Сообщений: 20,086
Записей в блоге: 3
Завершенные тесты: 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
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
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
12.10.2016, 12:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2016, 12:59

Заменить в строке s1 первое вхождение s2 на строку s3
Начал тренироваться в использовании базовых функций работы со строками, и тут...

Удвоить каждое вхождение символа в строке
Дана строка s и c символ . Удвойте каждое вхождение символа c в строке s...

Написать функцию, которая возвращает указатель на первое вхождение подстроки string2 в строке string1
char* strstr(char* string1, char* string2) Возвращает указатель на первое...


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

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

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