Напечатать все слова, которые встречаются в последовательности по одному разу - C (СИ)

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

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

Сам попробовал написать код,но везде одни ошибки.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void * a,const void *b)
{
    return srtcmp(*(char **)b,*(char **)a);
}
typedef char string_t[300];
#define GET_srting(s) (scanf("%250")[^\n]%"c",((s))==1)
#define MAX_Words[30]
#define DELIM ",\t\n"
int main (void){
string_t str;
while ((printf("String")) && GET_srting(str)){
    char * words[MAX_WORDS],*p=strchr(str,'.');
    int cout=0;
    if(p)
        *p='\0';
    for (p=strtok(str,DELIM); p&& cout <MAX_WORDS;p=strtok(NULL,DELIM)) words[cout++]=p;
    qsort(words,cout,sizeof(char*),cmp);
    while (cout)
        printf("%s\n",words[-count]);
}
return 0;
}
Можете выручить ? Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 прописных латинских букв; между соседними словами - запятая, за последним словом - точка. Напечатать все слова, которые встречаются в последовательности по одному разу.

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int main()
{
    char s[] = "every,breath,you,take,every,move,you,make.";
    char word[10], *p, *start = s;
    int i = 0, j = 0, n = 0;
    while(s[i]){
        if(s[i] != ',' && s[i] != '.'){
            word[j] = s[i];
            j++;
        }
        else{
            word[j] = '\0';
            j = 0;
            while(1){
                p = strstr(start, word);
                if(p == NULL)break;
                n++;
                if(n > 1)break;
                start = p + strlen(word);
            }
            if(n <= 1)
                printf("%s,", word);
            n = 0;
            start = s;
        }
            i++;
    }
    printf("\b.");
    return 0;
}

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

В этом коде на языке C:

  1. Задана строка s[], которая содержит последовательность слов, разделенных запятыми и точками.
  2. Переменная word[10] используется для хранения текущего слова, которое встречается в последовательности.
  3. Переменная p используется как указатель на текущий символ в строке s[].
  4. Переменная start указывает на начало текущего слова в строке s[].
  5. Переменные i и j используются для индексации символов в строке s[].
  6. Переменная n используется для подсчета количества раз, которое каждое слово встречается в последовательности.
  7. В цикле while происходит чтение каждого символа в строке s[].
  8. Если текущий символ не является запятой или точкой, он добавляется в переменную word[j].
  9. Если текущий символ является запятой или точкой, он помещается в начало следующего слова и переменная n сбрасывается в 0.
  10. В цикле while происходит поиск всех вхождений текущего слова в оставшуюся часть строки s[].
  11. Если текущее слово встречается в последовательности менее двух раз, оно выводится на консоль вместе с запятой.
  12. После завершения цикла while выводится точка.
  13. Функция main возвращает 0, что означает успешное выполнение программы.

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


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

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

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