开发者

How to get only first words from several C++ strings?

开发者 https://www.devze.com 2023-01-01 07:05 出处:网络
I have several C++ strings with some words. I need to get the first word from every string. Then I have to put all of 开发者_如何学Gothem into a char array. How can I do it?Here is one way of doing it

I have several C++ strings with some words. I need to get the first word from every string. Then I have to put all of 开发者_如何学Gothem into a char array. How can I do it?


Here is one way of doing it...

// 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;
}

But note the above code has marginal error checking and may have security flaws. And needless to say my C++ is a bit rusty. Cheers.


I'll assume it's homework, so here is a general description:

First, you need to allocate enough space in your char array. In homework, you are usually told the maximum size. That maximum has to be enough for all the first words.

Now, you need to have an index for the insertion point in that array. Start it at zero.

Now go over your strings in order. In each, move an index forward from 0 until you see a \0 or a space (or other delimiter. Insert the character at the insertion point in the result array and increase that index by 1.

If you have encountered a space or a \0, you've found your first word. If you were on the last string, insert a \0 at the insertion point and you're done. If not, insert a space and move to the next string.


what compiler are you using? converting to a chararray is the first thing to look for.

after done that, you can easily step through your array (and look for spaces) something like this:

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

i think you gotta figure out the rest yourself, since this looks like some homework for school :)


Assuming this is homework, and that when you say "strings" you mean simple null-delimited arrays of char (and not 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

If this is not homework, give us a little code to start with and we'll fill in the blanks.

0

精彩评论

暂无评论...
验证码 换一张
取 消