String55. Дана строка-предложение на русском языке. Вывести самое длинное слово в предложении. Если таких слов несколько, то вывести первое из них. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки.
Решение (мне не нравиться использовать массивы символов в C++, но «народ» требует):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# include <iostream> # include <windows.h> # include <fstream> # include <iomanip> using namespace std; const int nmax = 150; //максимальная длинна строки в задании должна быть меньше 255 int main() { SetConsoleCP(1251);//устанавливаем кодировку для консоли cp1251 кириллица SetConsoleOutputCP(1251); char s[nmax]; //объявляенм строку s ifstream in ("String55.txt"); //получаем строку из файла String55.txt in.getline(s,sizeof(s)); cout << s << "\n"; int i; // переменная будет использоваться в счётчиках char *sch; //здесь будет храниться ссылка на искомый символ в нашем случае пробел int pos; //здесь будет храниться позиция искомого символа, в нашем случае пробела char ch= ' '; //искомый символ, опять же пробел sch = strchr(s,ch); //ищем пробел char bigword[nmax]="";//здесь будет храниться самое большое слово while(sch!=NULL){ //пока в строке есть пробел, sch ссылается на него pos=sch-s+1;//вычисляем позицию пробела if (pos >(int)strlen(bigword)) //если позиция пробела больше длины самого большого слова for (i=0; i<pos;++i){ //копируем слово из строки посимвольно bigword[i]=s[i]; } for(i=0; s[i]!='\0'; ++i) {s[i]=s[i+pos]; } //удаляем слово из строки смещая символы на позицию пробела. sch = strchr(s,ch);// ищем пробел в строке } if (strlen(s)>strlen(bigword)) strcpy(bigword,s); //если оставшаяся часть строки больше самого большого слова, то это и есть самое большое слово. cout <<"="<<bigword<<endl; // выводим самое большое слово return 0; } |
Другие задачи из раздела String можно посмотреть здесь.
Комментарии: