在cstring文本中搜索单词(1-D array / c ++)

时间:2015-11-19 20:04:07

标签: c++ arrays search word c-strings

我练习一维数组并且问题要求用户输入一行文字然后输入用户想要搜索的单词并找出它重复的次数文本行。它不必是一个由空格分隔的单词(即'在'守门员')。

我的问题是在搜索句子的循环中创建一个正确的 if条件。事实是,我的行变量是 char char line[200];),而我的单词变量是 string string word;)所以我的程序给了我一个错误我在循环中写了一个像这样的条件:

if ( line[i] == word)

然后我尝试将单词变量更改为 char 并创建一个循环来获取输入,但后来我陷入了如何计算搜索文本行的循环。

我只想要一些指示。这是我目前的代码(它很乱):

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()

{
    char liner[200], word[200];
    int i, counter1 = 0, counter2 = 0;


    cout<<"Enter a line of text: ";
    cin.get (liner, 200);

    cout<<"Enter a word to search: ";

    for (i = 0; word[i] != ' '; i++)
    {
        cin>>word[i];

    }

    cout<<endl;

    for (i = 0; i < 200; i++)
    {
        if (liner[i] == word[t])
            {
                counter2++;
            }

    }

    cout<<word<<" was found "<<counter2<<" times."<<endl;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用strncmp,它将2个字符串与指定长度进行比较,以查看它们是否相等(在达到任何一个字符串结束或比较字符数时停止)。

因此,代码将类似于:

int main()
{
    char liner[200], word[200];
    int i, counter1 = 0, counter2 = 0;

    cout<<"Enter a line of text: ";
    cin.getline(liner, 200);

    cout<<"Enter a word to search: ";
    cin.getline(word, 200);
    cout<<endl;

    int lineLen = strlen(line);
    int wordLen = strlen(word);

    for (i = 0; i < lineLen && I < wordLen; i++)
    {
        if (strncmp(&line[i], word, wordLen)
        {
           counter2++;
        }
    }

    cout<<word<<" was found "<<counter2<<" times."<<endl;

    return 0;
}

要改进程序,可以尝试不使用固定大小的数组,而是将数据读入std :: string。