如何在向量中存储单个单词? (C ++)

时间:2018-12-12 02:09:16

标签: c++ string vector char

想法: 我正在尝试创建一个程序来搜索.txt文件中的用户输入的单词。没有给出单词的大小。我想找到一种动态存储用户单词的方法,以便将其与文件中的其他单词进行比较。

整个程序非常庞大,因此我只附加了与问题有关的部分。

#include <stdio.h>
#include <string.h>
#include <iostream> 
#include <cstdlib> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
#include <string>

    void vectorfill(vector<char>& newword) //filling char vector
    {
        char input;
        scanf_s("%c", &input);
        while (input != -1)
        {
            newword.push_back(input);
            scanf_s("%c", &input);
        }
    }

int main (void)
{
    vector<char> word; 
    printf("Enter a word: (-1 to finish)");
    vectorfill(word);    
}

问题:

1)在这种情况下,char向量是最好的主意吗?

2)(如果我们对char vector满意的话)如何使编译器理解用户写完单词了?我们可以请他在末尾加上(-1)吗?有没有更好的方法来标记输入的结尾?

2 个答案:

答案 0 :(得分:1)

1>否。请使用std::string

2>是。使用空格。

示例:

#include <iostream> 
#include <string>

int main ()
{
    std::string word; 
    std::cout << "Enter a word" << std::endl;
    std::cin >> word;
    // do something with word. For example, 
    std::cout << "You entered" << word << '\n';
}

一旦用户键入至少一个数字,字母或其他非whitespace character后跟一个空格字符,就会在word中捕获一个单词。如果您有特殊要求,例如该单词只能包含字母(没有数字,铃铛,ASCII艺术字符等),则使用简单的isalpha循环就可以用几行代码进行排序,但不能少有std::find_ifisalpha

答案 1 :(得分:0)

如果搜索内容在txt文件中。使用std::vector<std::string>可能更好。您可以使用split char分割单词。

如果内容来自用户的键盘输入。您还可以使用std::string存储每个键入的单词,并将其存储在std::vector<std::string>中。就是这样:

std::string s;
std::vector<std::string> vec;
std::cout << "Please enter somestring" << std::endl;
while (cin >> s)
{
    vec.push_back(s);
    cout << "You have entered : " << s << endl;
}