如何从字符串中提取单词并将它们存储在c ++中的不同数组中

时间:2013-11-06 12:40:17

标签: c++ string split

如何拆分string并将单词存储在单独的数组中,而不使用strtokistringstream并找到最好的单词?我只是一个初学者,所以我应该使用 string.h 中的基本函数来完成此操作,例如strlenstrcpy等。有可能吗?我试图这样做,我发布了我所做的。请纠正我的错误。

#include<iostream.h>
#include<stdio.h>
#include<string.h>
void count(char n[])
{
    char a[50], b[50];
    for(int i=0; n[i]!= '\0'; i++)
    {
        static int j=0;
        for(j=0;n[j]!=' ';j++)
        {
            a[j]=n[j];
        }
        static int x=0;
        if(strlen(a)>x)
        {
            strcpy(b,a);
            x=strlen(a);
        }
    }
    cout<<"Greatest word is:"<<b;
}

int main( int, char** )
{
    char n[100];
    gets(n);
    count(n);
}

4 个答案:

答案 0 :(得分:5)

您的示例中的代码看起来像是用C语言编写的。strlenstrcpy等函数来自C(尽管它们也是C ++标准库的一部分,用于通过标头{{1}进行兼容}})。

您应该使用标准库开始学习C ++,事情会变得更加容易。如果您使用标准库中的函数,可以使用几行代码来完成拆分字符串和查找最大元素之类的事情,例如:

cstring

修改 如果你真的想只使用// The text std::string text = "foo bar foobar"; // Wrap text in stream. std::istringstream iss{text}; // Read tokens from stream into vector (split at whitespace). std::vector<std::string> words{std::istream_iterator<std::string>{iss}, std::istream_iterator<std::string>{}}; // Get the greatest word. auto greatestWord = *std::max_element(std::begin(words), std::end(words), [] (const std::string& lhs, const std::string& rhs) { return lhs.size() < rhs.size(); }); 中的函数来挖掘细节部分,那么你可以采用以下方法将文本分成单词(我留下找到最好的单词给你,这不应该是硬):

std::string

答案 1 :(得分:0)

我会写两个函数。第一个跳过空白字符,例如

const char * SkipSpaces( const char *p )
{
    while ( *p == ' ' || *p == '\t' ) ++p;

    return ( p );
}

第二个复制非空白字符

const char * CopyWord( char *s1, const char *s2 )
{
    while ( *s2 != ' ' && *s2 != '\t' && *s2 != '\0' ) *s1++ = *s2++;
    *s1 = '\0';

    return ( s2 );
}

答案 2 :(得分:0)

尝试在一个小数组中得到一个单词(显然没有单词是> 35个字符)你可以通过检查两个连续的空格然后将该数组放入strlen()函数来获得该单词,然后检查前一个单词是否是然后放下那个单词,然后保留新单词
毕竟这不要忘记在每个单词catch之后用'\ 0'或null字符初始化单词数组,否则会发生这种情况: -
让我们说该数组中的第一个单词是'发生'而第二个'发送'如果你没有初始化那么你的数组将在第一个捕获之后:
发生
和第二次捕获:
* * ppen

答案 3 :(得分:0)

尝试一下。这里的ctr是句子中各个单词的数组(或向量)中元素的数量。您可以通过更改main中的函数调用来将句子与所需的字母分开。

#include<iostream>
#include<string>
#include<vector>
using namespace std;
void split(string s, char ch){
    vector <string> vec;
    string tempStr;
    int ctr{};
    int index{s.length()};
    for(int i{}; i<=index; i++){
        tempStr += s[i];
        if(s[i]==ch || s[i]=='\0'){
            vec.push_back(tempStr);
            ctr++;
            tempStr="";
            continue;
        }
    }
    for(string S: vec)
        cout<<S<<endl;
}
int main(){
    string s;
    getline(cin, s);
    split(s, ' ');
    return 0;
}