Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/65: Рейтинг темы: голосов - 65, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 17.11.2020
Сообщений: 21

Дана строка. Определить, сколько раз в ней встречается символ, введенный пользователем

30.01.2021, 22:19. Показов 13993. Ответов 76
Метки си (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить задачку на си. Знаю как посчитать количество всех символов в строке, а вот сколько раз встречается введённый символ, никак понять не могу.
Дана строка. Определить, сколько раз в ней встречается символ, введенный пользователем
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2021, 22:19
Ответы с готовыми решениями:

Определить, сколько раз в файле встречается символ, введенный с клавиатуры
Задание: Написать программу которая определяет сколько раз в файле встречается символ введенный с клавиатури. Очень нужно на завтра (на...

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

Дана строка символов. Сколько раз в ней встречается слог "МИ". 37. Определить самое длинное слово в строке. 38. Дана строка символов. Вывести на
строка символов.36. Дана строка символов. Сколько раз в ней встречается слог "МИ". 37. Определить самое длинное слово в строке. ...

76
Заблокирован
31.01.2021, 18:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Может, но это уже не будет строкой языка си. Читайте учебники.
Читаю.
Строка Cи - массив символов типа char.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Все функции заточены на это.
Функции, может, и заточена. А вот строка может не содержать символа конца строки.
Поэтому в целях безопасности проверка на длину не помешает.
Не зря в более современных языках строка - это не просто массив,а структура, которая в том числе содержит в себе и длину строки.
0
 Аватар для CoderHuligan
1754 / 1020 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
31.01.2021, 19:15
Цитата Сообщение от RatPoison Посмотреть сообщение
Не зря в более современных языках строка - это не просто массив,а структура
Причем здесь другие языки?

Добавлено через 1 минуту
Цитата Сообщение от RatPoison Посмотреть сообщение
А вот строка может не содержать символа конца строки.
Может, но тогда вам придется создавать свои функции для работы с такими сроками и забыть про стандартную библиотеку.
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
31.01.2021, 19:18
Цитата Сообщение от RatPoison Посмотреть сообщение
В реальности же юзер может добавить в конец сроки символ отличный от нуля.
Как? Чем? Пример в студию.

Юзер может лишь использовать тот функционал, который предоставит ему программа. Ни одна из функций ввода стандартной библиотеки си не позволит ввести строку без символа конца строки.
0
Заблокирован
31.01.2021, 19:21
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Причем здесь другие языки?
Странный вопрос.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Может, но тогда вам придется создавать свои функции для работы с такими сроками и забыть про стандартную библиотеку.
Можно просто добавить еще одну проверку.

Цитата Сообщение от stake-k26 Посмотреть сообщение
Как? Чем? Пример в студию.
руками.


C
1
word[index_of_end_of_string] = 'q';
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
31.01.2021, 19:27
Цитата Сообщение от RatPoison Посмотреть сообщение
Читаю.
Строка Cи - массив символов типа char.
Строка в си – это массив типа char, последний элемент которого хранит терминальный символ '\0'
0
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
31.01.2021, 19:33
Цитата Сообщение от RatPoison Посмотреть сообщение
word[index_of_end_of_string] = 'q';
это может сделать программист, но никак не пользователь.

Добавлено через 46 секунд
не путайте теплое с мягким
0
Заблокирован
31.01.2021, 19:39
Цитата Сообщение от stake-k26 Посмотреть сообщение
это может сделать программист, но никак не пользователь
пользователь языка программирования. так понятнее?

Вот в этом
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Строка в си – это массив типа char, последний элемент которого хранит терминальный символ '\0'
главное вот это
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Строка в си – это массив типа char,
если спросите почему, то создайте строку и вместо символа конца строки вставьте любой другой.
а потом сделайте
C
1
printf("%s", ваша_строка);
Компилятор вам ничего не скажет на этот счёт.
А при исполнении ptintf выйдет за пределы вашего массива и побежит по памяти пока не встретит 0.
0
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
31.01.2021, 19:57
Цитата Сообщение от RatPoison Посмотреть сообщение
Компилятор вам ничего не скажет на этот счёт.
Зато счас прийдёт TheCalligrapher со своим костром и быстренько всё нам расскажет... Запасайтесь попкорном, пацаны...
0
Заблокирован
31.01.2021, 20:00
Цитата Сообщение от analogov net Посмотреть сообщение
Запасайтесь попкорном, пацаны..
ом-ном-ном
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
31.01.2021, 20:08
Цитата Сообщение от stake-k26 Посмотреть сообщение
а есть какой-то смысл в использовании strchr?
Вопрос спорный. Если строка сплошь состоит из искомых символов, будет плохо, а если их на всю строку дай бог три штуки наберётся, то будет значительно быстрее. В общем случае при использовании strchr количество вызовов рекурсивной функции (а вместе с ней и strchr) будет равно количеству вхождений символа + 1. В вашем варианте функция вызывается столько раз, сколько символов в строке + 1. Что хуже.
Но в любом случае всё это не больше, чем смешная шутка, тут CoderHuligan прав абсолютно, в продакшн такое лучше не использовать. Разве-что препода напугать...
2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
31.01.2021, 20:28
Цитата Сообщение от RatPoison Посмотреть сообщение
главное вот это
Нет. Как правильно сказал мама Стифлера, строка в С – это непрерывная последовательность элементов символьного типа, завершающаяся и включающая в себя первый нулевой символ.

Во всех темах, касающихся строк, спецификация языка С критически завязана на это определение.

Стандарт языка специально приводит пример: строковый литерал "abc\0def" не является строкой.

Цитата Сообщение от RatPoison Посмотреть сообщение
если спросите почему, то создайте строку и вместо символа конца строки вставьте любой другой.
"создайте строку и вместо символа конца строки вставьте любой другой" - это оксюморон. Невозможно создать такую строку, ибо это не будет строкой.

Цитата Сообщение от RatPoison Посмотреть сообщение
а потом сделайте
C
1
printf("%s", ваша_строка);
Компилятор вам ничего не скажет на этот счёт.
И что? Скажет на этот счет что-то компилятор или нет не имеет никакого значения.

Компилятор языка С обязан выдавать диагностические сообщения только на нарушения синтаксиса и на нарушения ограничений (constraints). У вас же получилось нарушение семантики. Нарушения семантики не диагностируются компилятором. Они приводят к неопределенному поведению.

Цитата Сообщение от RatPoison Посмотреть сообщение
А при исполнении ptintf выйдет за пределы вашего массива и побежит по памяти пока не встретит 0.
Это наивное пионэрство. Поведение не определено, а не "побежит по памяти".

Добавлено через 2 минуты
Цитата Сообщение от stake-k26 Посмотреть сообщение
это может сделать программист, но никак не пользователь.
В терминологии языка С пользователь (user) - это и есть пользователь реализации языка С, то есть "программист".

Добавлено через 4 минуты
Цитата Сообщение от analogov net Посмотреть сообщение
Запасайтесь попкорном, пацаны
Никакого попкорна. После инжекции ценных знаний (этот мой пост) обучаемому разрешается задавать вежливые вопросы, если вдруг чего не ясно, на которые я охотно отвечу.

За любые отклонения от этой "дорожной карты" обучаемые отправляются не сельхозработы с вердиктом "в С еще рано".
2
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
31.01.2021, 20:36
TheCalligrapher, спасибо за познания, теперь знаю, что такое оксюморон
2
Заблокирован
31.01.2021, 20:55
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это наивное пионэрство. Поведение не определено, а не "побежит по памяти".
Проверьте сами. Будет печатать абру-кадабру за пределами массива пока не встретит ноль или не залезет в чью-то память)

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"создайте строку и вместо символа конца строки вставьте любой другой" - это оксюморон.
Отнюдь. Главное - реализация, а не определение.
Определение - это только слова.
Основополагающим является тот факт, что строка - массив чаров. что легко можно проверить.
Этот код не будет работать

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
    
    short word[5] = "hello";
    
    printf("%s", word);
   
    return 0;
}
//warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int *’
А вот этот будет.

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main() {
    
    char word[5] = "hello";
    word[5] = 'q';
    printf("%s", word);
   
    return 0;
}
А про то, что побежит по памяти или нет тоже можно посмотреть

C
1
2
3
4
5
6
7
8
9
10
int main() {
    char word[5] = "hello";
    word[5] = 'q';
    char* ptr = word;
    *(word + 6) =  0;
    
    printf("%s", word);
   
    return 0;
}
0
 Аватар для zeroalef
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
31.01.2021, 20:58
Цитата Сообщение от stake-k26 Посмотреть сообщение
Как? Чем? Пример в студию.
https://www.cyberforum.ru/post15224944.html
Цитата Сообщение от stake-k26 Посмотреть сообщение
Ни одна из функций ввода стандартной библиотеки си не позволит ввести строку без символа конца строки.
Ваще-то
не беда
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[lenin@example ~/src]$ cat ./sample.c && clang -pedantic -O2 ./sample.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int
main(int argc, char ** argv)
{
  char buf[ 10 ];
 
  bzero( buf, 10 );
  fgets( buf, 10, stdin );
  fputs( buf, stdout );
  exit(EXIT_SUCCESS);
}
[lenin@example ~/src]$ echo -e '123456789\0Walks around a buffer' 1>&0 | ./a.out 
123456789Walks around a buffer
[lenin@example ~/src]$
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
31.01.2021, 21:02
Цитата Сообщение от RatPoison Посмотреть сообщение
Проверьте сами. Будет печатать абру-кадабру за пределами массива пока не встретит ноль или не залезет в чью-то память)
Не смешите собравшихся. Тратить время на такую бессмысленную чепуху, как "проверка" неопределенного поведения (!) здесь никто не будет.

Цитата Сообщение от RatPoison Посмотреть сообщение
Отнюдь. Главное - реализация, а не определение.
Определение - это только слова.
Основополагающим является тот факт, что строка - массив чаров.
Это не более чем демагогия. Вперед с стандарт языка С читать определение строки. Если у вас это вызывает реакцию с втиле "это только слова" - значит в С вам еще рано.

Цитата Сообщение от RatPoison Посмотреть сообщение
что легко можно проверить.
Этот код не будет работать
А это ничего не значащие "пионэрские" эксперименты. Еще раз повторяю: ваши попытки экспериментального анализа неопределенного поведения - это пустая, ничего не значащая трата времени.
0
Заблокирован
31.01.2021, 21:17
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не смешите собравшихся. Тратить время на такую бессмысленную чепуху, как "проверка" неопределенного поведения (!) здесь никто не будет.
Не стоит говорить за всех ибо это
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
демагогия
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это не более чем демагогия. Вперед с стандарт языка С читать определение строки.
Определение создаются для понимания. Другое дело реализация)

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
значит в С вам еще рано.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
это только слова
И

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
ратить время на такую бессмысленную чепуху, как "проверка" неопределенного поведения (!) здесь никто не будет.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
значит в С вам еще рано.
Червь Моррис - один из первых компьютерных червей - как раз использовал эту уязвимость: выход за границы массива.
Можно не тратить время и потом пожинать плоды)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
31.01.2021, 21:25
Цитата Сообщение от zeroalef Посмотреть сообщение
Ваще-то
Не понял. Что мы должны были увидеть в этом загадочном примере? Как он относится к теме?

Добавлено через 4 минуты
Цитата Сообщение от RatPoison Посмотреть сообщение
Определение создаются для понимания. Другое дело реализация)
Я вижу, что тратить время дальше здесь смысла нет.

В программировании, как и в жизни, понимание некоторых вещей - это не вопрос способностей или образования, а вопрос взрослости (maturity) студента. Пока не достигнут определенный уровень взрослости, какие-либо попытки вбить в юную бошку полезные ценные знания будут лишь натыкаться на стену из "это просто слова", "определение создаются для понимания", "не стоит говорить за всех" и прочих унылых проявления "пионэрства".
1
Заблокирован
31.01.2021, 21:30
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В программировании, как и в жизни, понимание некоторых вещей - это не вопрос способностей или образования, а вопрос взрослости
Я с вами полностью согласен: вряд ли незрелый программист будет задумываться о последствиях)
Да и вообще сами программисты тоже делятся на определенные категории)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
31.01.2021, 21:35
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Я не знаю как фактически работает функция strlen, но даже просто массив символов, она считает верно
C
1
2
    char str[5]="123456";
    printf("%d", strlen(str));
Вот в данном случае, выдает результат 5, хоть я и пытаюсь запихнуть больше.
Это какой-то сюр. Ни С, ни С++ не позволят

C
1
char str[5]="123456";
Чем вы это сумели скомпилировать?
0
Заблокирован
31.01.2021, 21:37
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
fn main() {
 
let dolly = "dolly";
let length = dolly.len();
let slice = &dolly[0..length];
let bad_slice = &dolly[0..length+1]; //выход за границы массива
   
    println!("{} {}", slice, bad_slice);
 
//компилятор это сразу присекает
//thread 'main' panicked at 'byte index 6 is out of bounds of `dolly`
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2021, 21:37

Дана строка, содержащая текст на русском языке. Определить, сколько раз в ней встречается самое длинное слово.
Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в неё самое длинное слово.

Дана строка символов, посчитать сколько раз встречается символ + и символ *
Дана строка символов, посчитать сколько раз встречается символ &quot;+&quot; и символ &quot;*&quot;. Помогите...

Дана строка символов. Сколько раз встречается в ней сочетание ‘-+=’.
Строковый тип данных. Задачи. 1) Дана строка символов. Сколько раз встречается в ней сочетание ‘-+=’. Буду очень признателен,

Дана строка. Посчитать, сколько раз в ней встречается буква “b”
Дана строка. Посчитать, сколько раз в ней встречается буква “b”. Вывести на экран исходную строку и полученный результат.

Определить сколько раз в данной строке встречается символ, введенный с клавиатуры
Определить сколько раз в данной строке встречается символ, введенный с клавиатуры. Поиск символа в строке и подсчет количества вхождений...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru