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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.     char s[] = "every,breath,you,take,every,move,you,make.";
  7.     char word[10], *p, *start = s;
  8.     int i = 0, j = 0, n = 0;
  9.     while(s[i]){
  10.         if(s[i] != ',' && s[i] != '.'){
  11.             word[j] = s[i];
  12.             j++;
  13.         }
  14.         else{
  15.             word[j] = '\0';
  16.             j = 0;
  17.             while(1){
  18.                 p = strstr(start, word);
  19.                 if(p == NULL)break;
  20.                 n++;
  21.                 if(n > 1)break;
  22.                 start = p + strlen(word);
  23.             }
  24.             if(n <= 1)
  25.                 printf("%s,", word);
  26.             n = 0;
  27.             start = s;
  28.         }
  29.             i++;
  30.     }
  31.     printf("\b.");
  32.     return 0;
  33. }

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

В этом коде на языке 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы