#include <stdio.h>
#include <cstring>
#define MAX_WORDS 1024
#define MAX_WORD_LENGTH 64
bool split(const char *src, char *word, char *rest){
/* делим строку src на одно слово и остаток строки, попутно выбрасывая
пробелы в начале и в конце строки
т.е. из " раз два три " получим "раз" и " два три"
возвращаем false если в src только одно слово*/
size_t start, end, sp_pos, sp_pos2;
start = 0; end = strlen(src)-1;
while((src[start]==' ')&&(start<end))start++;
while((src[end]==' ')&&(end>start))end--;
if(start>=end)return false;//случилось что-то очень нехорошее! строка состоит из одних пробелов!
sp_pos = start;
//sp_pos2 = end;
while((src[sp_pos]!=' ')&&(sp_pos<end))sp_pos++;
if(sp_pos == end){//в строке только одно слово
strncpy(word, src+start, (end-start+1));
word[end-start+1]=0;
return false;
};
/*
если мы дошли сюда, то у нас в start - начало первого слова
в sp_pos - адрес первого пробела, т.е. конец первого слова+1
а в end - конец строки
*/
strncpy(word, src+start, (sp_pos - start));word[sp_pos - start]=0;
strncpy(rest, src+sp_pos, (end-sp_pos+1));rest[end-sp_pos+1]=0;
return true;
};
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
char *word = new char[MAX_WORD_LENGTH];
char *result = new char[MAX_WORD_LENGTH];
char *buf = new char[MAX_WORDS * MAX_WORD_LENGTH];
size_t max_length = 0;
printf("Введите ваше предложение:");
gets(buf);
size_t cur_word = 0;
bool done = false;
char *str = buf;//поступаем так, чтобы не потерять указатель на начало строки.
do{
if(split(str, word, str)) cur_word++; else done = true;
if(strlen(word)>max_length){
max_length = strlen(word);
strcpy(result, word);
};
}while(!done);
delete [] buf;
delete [] word;
printf("Слово с максимальной длиной(%i):\"%s\"\n", max_length, result);
delete [] result;
return 0;
}