Напечатать все слова, которые встречаются в последовательности по одному разу - C (СИ)
Формулировка задачи:
Сам попробовал написать код,но везде одни ошибки.
Можете выручить ?
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 прописных латинских букв; между соседними словами - запятая, за последним словом - точка. Напечатать все слова, которые встречаются в последовательности по одному разу.
#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; }
Решение задачи: «Напечатать все слова, которые встречаются в последовательности по одному разу»
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:
- Задана строка
s[]
, которая содержит последовательность слов, разделенных запятыми и точками. - Переменная
word[10]
используется для хранения текущего слова, которое встречается в последовательности. - Переменная
p
используется как указатель на текущий символ в строкеs[]
. - Переменная
start
указывает на начало текущего слова в строкеs[]
. - Переменные
i
иj
используются для индексации символов в строкеs[]
. - Переменная
n
используется для подсчета количества раз, которое каждое слово встречается в последовательности. - В цикле
while
происходит чтение каждого символа в строкеs[]
. - Если текущий символ не является запятой или точкой, он добавляется в переменную
word[j]
. - Если текущий символ является запятой или точкой, он помещается в начало следующего слова и переменная
n
сбрасывается в 0. - В цикле
while
происходит поиск всех вхождений текущего слова в оставшуюся часть строкиs[]
. - Если текущее слово встречается в последовательности менее двух раз, оно выводится на консоль вместе с запятой.
- После завершения цикла
while
выводится точка. - Функция
main
возвращает 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д