C/C++

Посчитать самое длинное слово в тексте

Задан текст (любой), найти в ней самое длинное слово и посчитать, сколько раз встречается в тексте. Написать программу. C++
LS
Leonid Shuvalov
1 133
#include <iostream>
#include <string>

using namespace std;

// все буквы и дефис, которые могут быть частью слова
// я использую только латинские буквы, потому что у меня
// кодировка UTF-8. В ней русские буквы двухбайтовые,
// а я не умею работать с wchar_t
const string az = "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ";

bool is_bukva(const char c)
{
for(int x = 0; x < az.length(); x++)
if(c == az[x]) return true;
return false;
}

int main()
{
string str, word, tmp;
int len, maxlen = 0;
int count = 0;
cout << "Введите текст: ";
getline(cin, str); // ввод строки текста
// ищем максмиально длинное слово
for(int x = 0; x < str.length(); x++)
{
tmp = "";
if( is_bukva(str[x]) )
{
while( is_bukva(str[x]) )
{
tmp += str[x];
x++;
}
x--;
len = tmp.length();
if(len > maxlen)
{
maxlen = len;
word = tmp;
}
}
}

cout << "Самое длинное слово в тексте -- " << word << '.' << endl;
// не знаю, почему, но если последний символ введенной строки --
// последняя буква слова, которое ищет программа, то она это слово
// не считает, поэтому я добавляю один символ в конец строки,
// чтобы слово было посчитано
str += '@';
// теперь ищем количество таких слов в тексте
for(int x = 0; x < str.length(); x++)
{
tmp = "";
if(str[x] == word[0])
{
int i = 0;
while(str[x] == word[i])
{
tmp += str[x];
x++;
i++;
}
x--;
if(tmp == word) count++;
}
}

cout << "Количество таких слов -- " << count << '.' << endl;

return 0;
}
Alex Попов
Alex Попов
85 110
Лучший ответ
Alex Попов наверное,
str += '@';
нужно было добавить перед поиском самого слова.
А то вдруг программа не правильно определит длину последнего слова, которое может оказаться самым длинным.
#include < iostream >
#include < fstream >
#include < map >
using namespace std;

int main()
{
ifstream file;
string word;
string longest = "";
map adder;
file.open("D://hello.txt");
if(file)
{
while (file >> word)
{
if (word.length() > longest.length()) longest = word;
if (adder.count(word) == 0) adder[word] = 1; else adder[word] += 1;
}
}file.close();
cout << "Longest word \"" << longest << "\" count " << adder[longest] << " times";
}
*примечание автора: Если самых длинных слов несколько - выводит количество последнего встреченного.
Николай Куркин
Николай Куркин
51 411