0

如何在不使用or的情况下拆分 astring并将单词存储在单独的数组中并找到最大的单词?我只是一个初学者,所以我应该使用string.h中的基本函数来完成这个,比如,等等。有可能这样做吗?我已经尝试过这样做,并且我正在发布我所做的事情。请纠正我的错误。strtokistringstreamstrlenstrcpy

#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

4 回答 4

5

您的示例中的代码看起来像是用 C 编写的。函数类似于strlenstrcpy起源于 C(尽管它们也是 C++ 标准库的一部分,以便通过 header 兼容cstring)。

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

// 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,可以按照以下方法将文本拆分为单词(我将找到最棒的单词留给您,这应该不会太难):

// Use vector to store words.
std::vector<std::string> words;
std::string text = "foo bar foobar";

std::string::size_type beg = 0, end;
do {
    end = text.find(' ', beg);
    if (end == std::string::npos) {
        end = text.size();
    }
    words.emplace_back(text.substr(beg, end - beg));
    beg = end + 1;
} while (beg < text.size());
于 2013-11-06T13:52:32.923 回答
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 );
}
于 2013-11-06T12:47:56.947 回答
0

尝试在一个小数组中获取一个单词(显然没有单词大于 35 个字符)您可以通过检查两个连续的空格来获取该单词,然后将该数组放入 strlen() 函数中,然后检查前一个单词是否更大,然后删除它word else 保留新词
之后不要忘记在每个单词 catch 后用 '\0' 或空字符初始化单词数组,否则会发生这种情况:-
假设该数组中的第一个单词是 'happen' 和第二个 'to ' 如果您不初始化,那么您的数组将在第一次捕获之后:
发生
和第二次捕获:
**ppen

于 2013-11-06T13:01:50.603 回答
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;
}
于 2018-10-08T19:46:12.773 回答