Вывести все слова, имеющие три и более одинаковых символа.
Добавлено: 24 фев 2016, 21:24
имеется несколько строк в каждой строке минимум 5 слов. Нужно Вывести все слова, имеющие три и более одинаковых символа.
Код: Выделить всё
#include <stdio.h>
#include <windows.h>
char* Rus(const char* text);
void main(void){
int minString = 10;
int minWord = 5;
int minSymbol = 5;
const int maxString = 20;
const int maxSymbol = 100;
static char buffer[maxString][maxSymbol];
char input[maxString][maxSymbol];
int row = 0;
printf(Rus("Введите не мение %d строк. В строке не менее %d слов.\nВ слове не менее %d символов. Слова разделены 1 пробелом\n"), minString, minWord, minSymbol);
printf(Rus("Для прекращения ввода нажмите <Enter> в начале строки.\n\n"));
while (gets_s(buffer[row]) != NULL && row < maxString){
if (strcmp(buffer[row], "") == 0){
if (row < minString){
printf(Rus("Вы должны ввести не менее %d строк(введено %d)\n"), minString, row);
continue;
}
break;
}
strcpy(input[row], buffer[row]);
char *pWord = strtok(buffer[row], " ");
int countWord = 0;
bool error = false;
while (pWord){
if (strlen(pWord) < minSymbol){
printf(Rus("Слово доолжно стоять не мение из %d символов (состоит из %d)\n"), minSymbol, strlen(pWord));
error = true;
break;
}
pWord = strtok(NULL, " ");
countWord++;
}
if (error){
continue;
}
else if (countWord < minWord){
printf(Rus("Вы должны ввести не менее %d слов (введено %d)\n"), minWord, countWord);
}
else{
row++;
}
}
/*
вот здесь должно быть решение (мозг вообще плывет).
я понимаю что нужно каждую строчку input-а разбить на слова,
каждое слово нужно разбить по-символьно и через цикл сравнения проверить есть ли одинаковые символы в слове, если есть и их более или равно 3. вывести это слово на экран. И повторить данное действие с каждым словом в строке и с каждой строкой.
(не получается написать код а точнее после разбития строки на слова с помощью [B]strtok[/B] а так как она типа [B]char*[/B] немогу ее перевести в одномерный масив массив)
*/
}
char bufRus[256];
char* Rus(const char* text){
CharToOemA(text, bufRus);
return bufRus;
}