В символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву - C (СИ) (79686)
Формулировка задачи:
Здраствуйте помогите найти ошибку пожалуйста. Задача такова: в символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву.
мне это задание нужно сделать с указателями, но для начала решил сделать с массивами, чтобы разобраться, как это работает, а потом от этой задачи перебраться к указателям, т.к. счас не совсем понимаю, как с ними работать.
#include<stdio.h> #include<windows.h> testword(char string[]) { int i; int i1=0; int j=0; int in; int out; char d[100]; for(i=0;string[i]!='\0';i++) { if(string[i-1]==' '||i==0) { in=i; printf("%d,%c\n",i,string[in]); } if(string[i+1]==' '||string[i+1]=='\0') { out=i; printf("%d,%c\n",i,string[out]); if(string[in]!=string[out]) { for(j=in;j<out;j++) { d[i1]=string[j]; } d[i1]=' '; i1++; } } printf("%s\n",d); } return 0; } void main() { char s[100]; gets(s); printf("%s\n",s); testword(s); }
Решение задачи: «В символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> /* в символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву. */ #define SEPCHAR " \t\n" /* символы - разделители */ #define STRLEN 128 int main(void){ char buf[STRLEN], *p; while ( 1 ){ printf("String: "); if ( !fgets(buf, sizeof(buf), stdin) ) /* прочитать строку, если неудачно - выход с ошибкой */ exit(1); if ( *buf == '\n' ) /* если строка пустая - на выход */ exit(0); /* а вот тут сначала надо бы описание библиотечной функции strtok прочитать */ for ( p = strtok(buf, SEPCHAR); p != NULL; p = strtok(NULL, SEPCHAR) ) if ( *p != *(p + strlen(p) - 1) ) printf("%s ", p); printf("\n"); } exit(0); }
Объяснение кода листинга программы
- Удаление всех слов, начинающихся и заканчивающихся на одну и ту же букву в символьной строке.
- Ввод-вывод данных осуществляется через стандартный ввод-вывод (stdin, stdout).
- Переменная buf используется для хранения строки, введенной пользователем.
- Используется функция fgets для чтения строки из стандартного ввода.
- Если строка пустая, программа завершается.
- Используется функция strtok для разделения строки на слова.
- Используется функция printf для вывода отфильтрованных слов.
- Если первое и последнее символы слова совпадают, слово не выводится.
- Программа завершается после обработки всех слов в строке.
- В случае ошибки программа завершается с кодом 1.
- В случае успешного выполнения программы, она завершается с кодом 0.
- Временная память выделяется с помощью оператора malloc или calloc.
- Временная память освобождается с помощью оператора free.
- Временная память используется для хранения дополнительных данных, которые не могут быть размещены в стеке.
- Временная память может быть использована для хранения больших объемов данных.
- Строка, введенная пользователем, не превышает 128 символов.
- В символьной строке используются символы-разделители для разделения слов.
- В символьной строке слова разделены пробелами, табуляцией или символом новой строки.
- В символьной строке используется функция strlen для определения длины строки.
- В символьной строке используется оператор == для сравнения символов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д