Поиск самого длинного слова в строке. С++

372
10 апреля 2017, 07:16

Нужно найти самое длинное слово в строке. BAЖНО! Без класса string! проблема в том что код, не работает. и мне выводит всю строку вместо самого длинного слова

 #include <iostream>
    #include <locale>
    #include <cstring> 
    using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    char S[100];
    int n, i, k, kol, max = 0, y,g,j=0;
    cin.getline(S, 100);
    int p;
    i = 0;
    for (int l=0;l<strlen(S);l++)//проходимся по длине строки, и ищем пробелы, и после каждого меряем слово.
    {
    while (S[l] != ' ')
    {
        if (S[l] == ' ')
        {
            p=l;
            l++;
        }
        else
        {
            do
            {
                l++;
            } while (S[l] != ' ');    //длина слова
             kol = strlen(S)-l-p; //длина слова  //p последний пробел
            if (kol > max)
            {
                l++;
                     ///max word
                max = kol;
            }
        }
     }
    }
    for (n; n<k; n++)
    {
        cout << S[n];
    }
    cout << " - самое длинное слово" << endl;
    system("pause");
}
Answer 1

У вас на мой вкус сложновато... Я бы делал так:

int main()
{
    const int STRLEN = 200;
    char s[STRLEN];
    cin.getline(s, STRLEN);
    size_t maxlen = 0;
    char * maxidx = nullptr;
    for(char * c = s; *c;)
    {
        while(*c == ' ') ++c;
        if (*c == 0) break;
        char * begin = c;
        while(*c && *c != ' ') ++c;
        if (maxlen < (c - begin))
        {
            maxlen = c - begin;
            maxidx = begin;
        }
    }
    if (maxlen == 0)
    {
        cout << "Empty line!\n";
        return 0;
    }
    else
    {
        *(maxidx+maxlen) = 0;
        cout << maxidx;
    }
}
Answer 2

Не уверен что это поможет вам, вот рабочий код:

#include <iostream>
using namespace std;
int main() {
    // сторка
    char * theString = " dsjfkd1 sdf2 dsfkdsj3   sdfjsdkjfdsjf4   d5 ";
    char * theLetter = theString; // здесь будем хранить адрес очередного символа начинаяя с первого
    unsigned counter = 0, // счетчик подсчета букв в слове
        storage = 0; // здесь будем хранить количество букв самого большого слова
    while (*theLetter) { // повторять пока не прийдет нулевой символ конца
        theLetter++; // увеличиваем очерной адрес на размер символа
        if (*theLetter != ' ') // если не пробел
            counter++; // увеличиваем счетчик
        else
            if (counter > storage) { // если букв больше чем мы знали раньше ,
                storage = counter;   // то сохраним это число
                counter = 0; // апотом обнулим счетчик подсчета
            }
    }
    cout << storage << endl; // результат
}
READ ALSO
Шаблонная функция

Шаблонная функция

Есть шаблонная функция:

236
Ошибка при выделении памяти в Си (Access violation)

Ошибка при выделении памяти в Си (Access violation)

Здравствуйте, возникла проблема при выполнении программы

269
Как узнать, нажималась ли кнопка в форме

Как узнать, нажималась ли кнопка в форме

Приветствуюподскажите, есть обычная форма подписки и есть всплывающее окно при уходе с сайта

260