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

Объяснение кода листинга программы

  1. Удаление всех слов, начинающихся и заканчивающихся на одну и ту же букву в символьной строке.
  2. Ввод-вывод данных осуществляется через стандартный ввод-вывод (stdin, stdout).
  3. Переменная buf используется для хранения строки, введенной пользователем.
  4. Используется функция fgets для чтения строки из стандартного ввода.
  5. Если строка пустая, программа завершается.
  6. Используется функция strtok для разделения строки на слова.
  7. Используется функция printf для вывода отфильтрованных слов.
  8. Если первое и последнее символы слова совпадают, слово не выводится.
  9. Программа завершается после обработки всех слов в строке.
  10. В случае ошибки программа завершается с кодом 1.
  11. В случае успешного выполнения программы, она завершается с кодом 0.
  12. Временная память выделяется с помощью оператора malloc или calloc.
  13. Временная память освобождается с помощью оператора free.
  14. Временная память используется для хранения дополнительных данных, которые не могут быть размещены в стеке.
  15. Временная память может быть использована для хранения больших объемов данных.
  16. Строка, введенная пользователем, не превышает 128 символов.
  17. В символьной строке используются символы-разделители для разделения слов.
  18. В символьной строке слова разделены пробелами, табуляцией или символом новой строки.
  19. В символьной строке используется функция strlen для определения длины строки.
  20. В символьной строке используется оператор == для сравнения символов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы