2010-05-26 3 views
0

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

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

+2

Если это домашнее задание, отметьте его. – egrunin

+1

Вы уже пробовали? Опубликуйте код, который вы пытаетесь сделать, который не работает, и мы можем помочь его отладить. –

+0

Вы можете сделать это, прочитав сначала учебник по C++. –

ответ

3

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

// 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++ немного ржавый Ch. EERS.

1

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

после сделали это, вы можете легко выйти через массив (и искать пробелы) что-то вроде этого:

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

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

+1

Почему он должен преобразовать 'std :: string' в' char * ', чтобы он мог вручную выполнить его, когда он мог просто использовать' str.find() '? –

+0

havent был в C++ много, более простой c. В настоящее время я не знаю функций библиотеки, таких как str.find() Я думаю, что при компиляции машина может делать то же самое. BTW: учителя, как, например, вручную, лучше, чем библиотечные функции для домашней работы;) – SirLenz0rlot

1

Предполагая, что это домашнее задание, и что, когда вы говорите «строки» вы имеете в виду простые нулевых разделителей массивов 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 

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

2

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

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

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

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

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

Смежные вопросы