В символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву - 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 для определения длины строки.
- В символьной строке используется оператор == для сравнения символов.