Нужна ваша помощь со строками
Я понимаю что вопрос будет звучать из разряда напишите мне код. У меня вообще нет идей как это сделать, ведь я только начал учится и перед тем как задать вопрос сюда, я уже облазил пол интернета где не нашёл ответа, а если и находил то очень сложным языком что я ничего не понимаю, а мне надо разобраться, а я читал пособник по си и там я находил только определённые функции и их использование но чёткого ответа на вопрос не книга не я после её прочтения дать не могу. Искренне рассчитываю на вашу помощь.
Мне нужно что бы пользователь ввёл в строку слова который разделяются пробелами, за тем программа вывела подстроку которая будет без первого и последнего слова разделенных пробелами.И желательно что бы человек который мне поможет дал хотя бы минимальное объяснение как он это сделал.
Ответы (3 шт):
Данную задачу я не могу ещё мельче разбить
Хорошо. С этим я могу Вам помочь.
Задача в вопросе включает в себя следующие подзадачи.
Прочитать строку введенную пользователем.
Найти, где в этой строке начинается второе слово - первый непробел после первого пробела после первого непробела.
Найти, где в этой строке заканчивается предпоследнее слово - последний непробел перед последним пробелом.
Вывести подстроку строки из 1. от 2. до 3.
Я вам код не буду писать.
Вот алгоритм (на основе что я понял выше описанное)
1. Вводим текст, состоящий из n слов.
2. Разбираем его на массив, каждое слово из текста - это один элеиент текстового массива. (string)
3. Выводим тот самый массив, начиная с 1 до n-2 (в случае если массив загружали слова начиная с индекса 0) элемента.
Например: Иммеем текст
Привет мир это моя программа
в нашем случае:
Привет - [0]
мир - [1]
это - [2]
моя - [3]
программа - [4]
и мы просто выводим массив начиная с 1 до 3. Как я писал выше, мы начали массив зополнять с 0 элемента.
Вот решение:
#include <stdio.h>
#include <strings.h>
int main(int argc, char *argv[]) {
char buf[1024]; // Буфер под вводимую строку
char *cp; // Указатель на начало результата
// Считываем строку
cp = fgets(buf, 1024, stdin);
if (cp == NULL) {
printf("Ошибка при вводе строки!\n");
return -1;
}
// Ищем последний пробел справа
cp = rindex(buf, ' ');
*cp = '\0'; // Обрезаем строку по последнему пробелу
// Ищем первый пробел слева
cp = index(buf, ' ');
// Печатаем результат
printf("%s\n", cp);
}
Три оператора всего, фактически...
И код работает:
$ gcc main.c
$ ./a.out
qqq wwww eeeeeee r tt yyyy
wwww eeeeeee r tt
bash-5.0$