Удалить одинаковые слова предложения, идущие подряд - C (СИ) (150116)

Узнай цену своей работы

Формулировка задачи:

Удалить одинаковые слова предложения, идущие подряд. с коментариями пожалуйста

Решение задачи: «Удалить одинаковые слова предложения, идущие подряд»

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
static char* word_next(char* s, int* n);
static int   str_cmp(const char* s1, int n1, const char* s2, int n2);
void  delword_rep2(char* s);
 
int main(void){
    char s[] = "APL APL APL go go go go go. go XYZ? XYZ XYZ!XYZ";
    puts(s);
    delword_rep2(s);
    puts(s);
    return 0;
}
 
// да тут всё просто, ибо затираем и всё...
void delword_rep2(char* s){
    int   n1, n2;
    char* w1, *w2, *o, *p;
    
    for(p = s; *s; *s = *p){
        if(isalnum(*p)){
            w1 = word_next(p,  &n1); // получаем слово
            if(w1 != NULL){
                w2 = w1 + n1;
                //далее в цикле сравниваем со следующими словами
                while((o = word_next(w2, &n2)) != NULL){
                    if(str_cmp(o, n2, w1, n1))
                        w2 = o + n2;
                    else
                        break;
                }
                if(w2 != w1 + n1){
                    p = w2;
                    continue;
                }
            }
 
            w1 += n1;
            while(p != w1)
                *s++ = *p++;
            continue;
        }
        ++s;
        ++p;
    }
}
 
//получение слова
static char* word_next(char* s, int* n){
    char* p;
    while(*s && !isalnum(*s)){
        if(*s == '.' || *s == '!' || *s == '?')
            return NULL;
        ++s;
    }
    p  = s;
    *n = 0;
    while(isalnum(*p))
        ++p;
    *n = (int)(p - s);
    return s;
}
 
//сравнение 2-ух слов
static int str_cmp(const char* s1, int n1, const char* s2, int n2){
    if(n1 != n2)
        return 0;
    while((n1 > 0) && (*s1 == *s2)){
        ++s1;
        ++s2;
        --n1;
    }
    return (!n1);
}

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


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

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

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