Как получить только первые слова из нескольких строк C ++? - PullRequest
0 голосов
/ 26 мая 2010

У меня есть несколько строк C ++ с некоторыми словами. Мне нужно получить первое слово из каждой строки. Затем я должен поместить их все в массив символов. Как я могу это сделать?

Спасибо, я заранее!

Ответы [ 4 ]

3 голосов
/ 26 мая 2010

Вот один из способов сделать это ...

// SO2913562.cpp 
//


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


void getHeadWords(const char *input[]
                    , unsigned numStrings 
                    , char *outBuf
                    , unsigned outBufSize)
{
    string outStr = "";

    for(unsigned i = 0; i<numStrings; i++)
    {
        stringstream ss(stringstream::in|stringstream::out);
        ss<<input[i];

        string word;
        ss>>word;
        outStr += word;

        if(i < numStrings-1)
            outStr += " ";
    }

    if(outBufSize < outStr.size() + 1)//Accomodate the null terminator.
        //strncpy omits the null terminator if outStr is of the exact same
        //length as outBufSize
        throw out_of_range("Output buffer too small");

    strncpy(outBuf, outStr.c_str(), outBufSize);
}

int main () 
{
    const char *lines[] = {
        "first sentence"
        , "second sentence"
        , "third sentence"
    };

    char outBuf[1024];

    getHeadWords(lines, _countof(lines), outBuf, sizeof(outBuf));

    cout<<outBuf<<endl;

    return 0;
}

Но учтите, что в приведенном выше коде есть проверка предельных ошибок и могут быть недостатки в безопасности. И, разумеется, мой C ++ немного ржавый. Приветствия.

2 голосов
/ 26 мая 2010

Я предполагаю, что это домашнее задание, поэтому вот общее описание:

Во-первых, вам нужно выделить достаточно места в вашем массиве символов. На домашнем задании вам обычно говорят максимальный размер. Этого максимума должно хватить для всех первых слов.

Теперь вам нужно иметь индекс для точки вставки в этом массиве. Начните с нуля.

Теперь пройдитесь по строкам по порядку. В каждом из них перемещайте индекс вперед от 0 до тех пор, пока не увидите \ 0 или пробел (или другой разделитель. Вставьте символ в точку вставки в массиве результатов и увеличьте этот индекс на 1.

Если вы встретили пробел или \ 0, вы нашли свое первое слово. Если вы были в последней строке, вставьте \ 0 в точку вставки, и все готово. Если нет, вставьте пробел и перейдите к следующей строке.

1 голос
/ 26 мая 2010

Предполагая, что это домашнее задание, и когда вы говорите "строки", вы имеете в виду простые массивы с нулевым разделением char (а не std::string):

define your strings  
define your resulting char array  
for each string  
    find the offset of the first char that is not in the first word
    append that many bytes of the string to the result array

Если это не домашняя работа, дайте нам небольшой код для начала, и мы заполним пробелы.

1 голос
/ 26 мая 2010

Какой компилятор вы используете?преобразование в chararray - это первое, что нужно искать.

после этого вы можете легко пройтись по своему массиву (и искать пробелы) примерно так:

while (oldarray[i++] != ' ')
  yournewarray[j++];

я думаюВы должны сами разобраться, так как это выглядит как домашнее задание для школы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...