Посчитать в строке количество слов, состоящих только из разных букв - C (СИ)
Формулировка задачи:
Помогите пожалуйста разобраться.. Дано задание написать программу на С, которая считает в строке количество слов, состоящих только из разных букв.. Я ее сделал таким образом:
При выполнении после ввода строки программа завершает работу..Запускал в отладчике, там вроде значения переменных и функций корректные..Не могу найти ошибку
#include <stdio.h> #include <string.h> #include <conio.h> #define MAX 1000 int diff_detect(char* p_str) { char* pp; int i=0; const char* temp=p_str; for(pp=p_str;pp<(pp+strlen(p_str)-1);++pp) { i=strchr(temp,*pp)-strrchr(temp,*pp); if(i!=0) return 0; } return 1; } int diff_word(const char* str,const char* delim) { char* buf, * p; int cnt=0; if ( ! str || ! delim ) return -1; if ( ( buf = strdup(str) ) == NULL ) return -1; for(p=strtok(buf,delim);p;p=strtok(NULL,delim)) { if(diff_detect(p)) ++cnt; } return cnt; } void main() { char line[MAX]; const char* w_border=" "; const char* p_line=line; printf("This application solves task 16 from laboratory work 4.\n"); printf("*******************************************************************************\n"); printf("Please input your string:\n"); gets(line); printf("Number of words which consist of different letters is: %d\n",diff_word(p_line,w_border)); getch(); }
Решение задачи: «Посчитать в строке количество слов, состоящих только из разных букв»
textual
Листинг программы
for(pp=p_str;pp<(pp+strlen(p_str)-1);++pp) { i=strchr(temp,*pp)-strrchr(temp,*pp); if(i!=0) return 0; }
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- В переменной
pp
хранится указатель на начало строкиp_str
. - В переменной
i
хранится значение 0. - В цикле выполняется следующее:
- Переменная
pp
увеличивается на 1. - В переменной
i
хранится разница междуstrchr(temp,*pp)
иstrrchr(temp,*pp)
. Гдеstrchr
- функция, возвращающая первый символ в строкеtemp
, который равен символу в позицииpp
в строкеp_str
. Аstrrchr
- функция, возвращающая последний символ в строкеtemp
, который равен символу в позицииpp
в строкеp_str
. Если такой символ в строкеtemp
отсутствует, то возвращается 0. - Если
i
не равно 0, то выполняется выход из цикла и возврат 0.
- Переменная
- Если цикл был выполнен полностью, то возвращается 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д