Посчитать в строке количество слов, состоящих только из разных букв - 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.