Задать вопрос

Как написать программу на СИ?

Нужна помощь в написании программы на СИ. Нужно подсчитать количество слов в введенной с клавиатуры строке заканчивающихся и начинающихся на введенное с клавиатуры слово. Буду благодарен!
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Простой 6 комментариев
Решения вопроса 2
2ord
@2ord
Сейчас, по-любому, уже поздно задачи решать.
Но, в общем, сперва нужно получить первую и последнюю букву введенной строки и сохранить их в переменные.
Затем с введенной тестовой строки в цикле, пока не будет достигнут конец строки, проверять каждый знак является ли разделителем (пробелом). Так извлекается слово. Если первая и последняя буквы совпадают с эталоном, то счетчик слов увеличивается.
Ответ написан
@nakem
Мой совет. Попросите кого-то из знакомых программистов. Здесь вряд ли кто-то будет писать за вас. Вот если бы вы что-то набросали сами, а потом пришли сюда с просьбой найти ошибки или попросили бы совет как лучше сделать, то это другое дело. Попробуйте нагуглить код, если в русском сегменте ничего не нашлось, то стоит перевести поисковый запрос на английский язык.
По поводу задачи. Как я понял условие. Подается два аргумента. Первый строка с нным количеством слов. И вторая строка с одним таргетным словом. Нужно найти кол-во слов в первой строке, которые заканчиваются и начинаются с таргетного слова.
Предположим, что пробелов в начале и в конце может быть произвольное кол-во. Между словами тоже самое.
Запускаем цикл пока i не равно '\0' .
Далее нам нужно написать функцию skip_spaces. Она будет скипать пробелы до тех пор, пока не встретиться любой символ или '\0'. На символ проверяем через таблицу Ascii. Пишем в терминале man ascii пролистываем до таблицы в десятичной системе счисления(decimal) и ищем значения букв. То есть, строчные буквы от 97(а) до 122(z).
Далее в цикле используем нашу написанную SkipSpaces, чтобы увеличить наше i и пропустить пробелы перед началом потока слов.
Далее мы встречаем первое слово. Нам нужно написать функцию check_word, которая будет возвращать булеву переменную в зависимости от того есть ли в нем таргетное слово. Мы передаем в эту функцию указатель на символ, на котором сейчас стоим &words[i] и таргетное слово. Далее в самой функции check_word(char *word, char *target) нам нужно сохранить начало слова в переменную start. Посчитать кол-во символов в слове size_word. То есть просто проскакать по word до первого пробела. Далее просто for (i:=0; i < len(target); i++) мы сравниваем начало word с таргетом, если все ок, то идем дальше, если что-то не ок, то возвращаем false. Во втором цикле for (i := size_word - len(target); j := 0; i < size_word; i++; j++) мы уже находим таргет в конце нашего слова. Если все ок, все совпало, то возвращаем true.
Дальше в нашем мейне нам необходимо увеличить count_valid_words, если check_word вернула true. Далее, необходимо скипнуть символы. Аналогично как с skip_spaces().
На этом все.
Пока писал этот текст успел пожалеть, что просто не накидал код ахахах. Но я очень надеюсь, что ты сам решишь эту задачку, а не будешь списывать. Начни программировать, это очень интересно!)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы