Разделение строки

Рейтинг: -2Ответов: 1Опубликовано: 29.04.2015

Здравствуйте, помогите пожалуйста с заданием. Требуется разделить строку на предложение, предложения на слова, а затем вывести с каждого предложения самое длинное слово. Важно использовать при этом массивы.

Смог сделать только так, чтобы искало самое большое слово со всей строки.

    string str = "This is a test message. This is a test";
    char* cstr = new char [str.length()+1];
    strcpy(cstr, str.c_str());
    char* p = strtok (cstr, " ,");
    char* maxword = p;
    while(p = strtok(NULL, " ,")) {
        if(strlen(maxword) < strlen(p))
        maxword = p;
    }
    cout << maxword << endl;

Ответы

▲ 3Принят

Использование в С++ старых добрых C-функций - не самая хорошая идея. Конечно, они будут работать. Но это приумножает мировую скорбь. В С++ есть свои средства для работы со строками. И они довольно неплохие.

#include <sstream>
#include <iostream>
using namespace std;

int main()
{
    string str = "This is a test message. This is a test";

    istringstream ss(str);
    string sentence;
    while (getline(ss, sentence, '.')) { // цикл по потоку предложений
        istringstream ws(sentence);
        string curr, longest;
        while (ws >> curr) // цикл по потоку слов
            if (curr.size() > longest.size()) longest = curr;

        sentence = sentence.substr(sentence.find_first_not_of(" "));
        cout << sentence << " => " << longest << endl;
    }

    char dummy[42]; // используем массивы, поскольку это очень важно :)

    return 0;
}