如何输入单词c ++的数组

时间:2013-12-06 07:34:38

标签: c++ character-arrays

我需要编写一个程序,输入一个单词数组,每个单词不超过50个字符。 (我只能使用<iostream><string.h>

示例输入是: 观看绊倒学生点欢迎

我的代码:

char input[1000000];
for (int i = 0, i < 1000000, i++) {
    cin >> input[i];
}

现在我如何识别每个单词(每个单词最多50个字母)并将其存储在单独的字符串中,以便:

str1 = 'watch'
str2 = 'stumble'

等等。

然后我必须找到所有以用户输入的前缀开头的单词,例如 如果前缀是“stu”,则输出为: 蹒跚学生

如果有人能在接下来的1-2小时内提供帮助,我将非常感激!

2 个答案:

答案 0 :(得分:2)

对于初学者,请阅读std::string,这样您就不必担心长度了。你这样做是循环条件,所以你阅读并立即检查它是否成功:

std::string word;
while (std::cin >> word) // ...

这将读取由空格(空格,制表符,换行符等)分隔的字符串。 然后我将它们存储到std::vector中,这样您就不必担心有多少单词:

std::vector<std::string> words;
std::string word;
while (std::cin >> word)
    words.push_back(word);

然后循环显示并打印以"stu"开头的单词,您有多种选择。我将建议使用标准库算法copy_if。这需要谓词(检查函数),并将其应用于vector中的每个元素。如果谓词返回true,它会将元素复制到其他地方,在这种情况下(这是唯一略微繁琐的位),我们使用一种称为an的特殊迭代器复制到std::coutostream_iterator

std::copy_if(std::begin(words),
             std::end  (words),
             std::ostream_iterator<std::string>(std::cout, " "),
             [](const std::string& word){ return word.find("stu") == 0; });

这使用了一些C++11功能(copy_if,lambdas,非会员begin / end)。你也可以自己编写裸循环(不愿意):

for (std::vector<std::string>::const_iterator it = words.begin();
     it != words.end();
     ++it)
{
    if (it->find("stu") == 0)
        std::cout << *it << ' ';
}

您也可以使用类似的技巧来阅读输入,但我在上面展示了更常见的方式(根据我的经验)。有人会认为这是可取的,但它使用更奇怪的迭代器:

std::vector<std::string> words;
std::copy(std::istream_iterator<std::string>(std::cin),
          std::istream_iterator<std::string>(),
          std::back_inserter(words));

istream_iterator是一种将输入流视为容器的方法。

所以这给你两个选择:

自己编写原始循环:whilefor。这是大多数人写它的方式,特别是“初学者”,但我通常更喜欢使用内置功能来避免低级别的东西。根据您正在应用的概念进行思考,即“我将这些单词复制到屏幕上,如果以”stu“开头。

另一种选择是使用<algorithm>标题中提供的功能。我喜欢这个选项,但它确实涉及了解一些奇怪的迭代器。

修改:顺便提一下,您需要的标头是<algorithm><iostream><iterator><string>和{{1} }。 (如果编写原始循环,可以删除<vector><algorithm>

再次编辑:好的,我讨厌写这篇文章,但这是一种只使用<iterator>样式字符串的方式。在使用像这样的裸数组和指针时,你必须非常小心。我已经评论了代码来解释每一步。我不想仅仅提供这样的完整解决方案,但我不确定如何最好地解释每个部分。请从中学习,而不仅仅是偷它。

C

答案 1 :(得分:0)

您可以使用vector<string>存储输入。然后,使用std::string::find()查找匹配的内容。