C ++用户可以使用cin创建一个新字符串吗?

时间:2012-09-19 02:26:05

标签: c++

我写了一本字典。我的目标是让用户输入新单词并定义它们。

我认为我已经将'定义词'部分放下了,我休息了下来。我在下面写了一个我想要的例子。我不希望有人为我做这件事;我只是想知道是否有办法做到这一点以及我可以在哪里学到更多东西。

现在,我正在使用C ++作为傻瓜,Sam正在为教师自学。

string newword
string word

cout << "Please enter a word" >> endl;
cin >> word;
if (word == newword)
{
    create string <newword>; // Which would make the following
                             // source code appear without
                             // actually typing anything new
                             // into the source code.
}  
string newword
string word
string word2 // which would make this happen

cout << "Please enter a word" >> endl;
cin >> word;
if (word == newword)
{
    create string <newword> 
}

2 个答案:

答案 0 :(得分:3)

我会使用std::map,因为它是一个字典样式的容器。 map容器非常适合这种情况,您可以提供唯一键以与其他数据匹配。由于典型字典每个单词只有一个条目,这是完美的。

typedef允许我们定义具有名称的类型。这里有用,因为我们不必一遍又一遍地输入std::map<std::string, std::string>。想象一下,每当您看到Dictionary时,它都会替换为std::map<std::string, std::string>

// Map template requires 2 types, Key type and Value type.
// In our case, they are both strings.
typedef std::map<std::string, std::string> Dictionary;
Dictionary myDict;

然后我会要求用户输入条目,然后让他们定义他们的条目。

std::string word;
std::cout << "What word would you like added to the dictionary?" << std::endl;
std::cin >> word;

std::string definition;
std::cout << "Please define the word " << word << std::endl;
std::cin >> definitiion;

下一步只需将单词及其定义插入字典即可。在地图上使用[]运算符,我们会替换所提供的密钥word已存在的任何条目。如果它不存在,它将作为新条目插入。请注意,任何先前定义的同名单词现在都有一个新定义!

myDict[word] = definition;

运行它会产生类似于:

的东西
>> What word would you like added to the dictionary?
>> Map
>> Please define the word Map
>> Helps you find things

现在可以轻松访问地图中的定义:

myDict["Map"]; // Retrieves the string "Helps you find things"

答案 1 :(得分:1)

编辑:我的回答仅向您展示如何构建没有定义的单词列表。希望它会打开一些精神之门,但为了实现将每个单词的定义附加到主要目标,您需要使用map而不是vector,因为Aesthete's answer显示

您需要的是一个包含集合字符串的变量。最容易使用和最常用的一个是矢量:

// At the top of your program
#include <vector>

...

vector<string> words;

...

cout << "Please enter a word" << endl;
cin >> word;
words.push_back(word);     // This adds word to the end of the vector.

向量的行为与数组非常相似,如果你有一个名为words的向量,你可以使用语法words[i]访问第(i + 1)个元素:

cout << "The 3rd word is " << words[2] << endl;

您可以将上面的2替换为其他更复杂的表达式,包括依赖于变量的表达式。这允许你做一些事情,比如列出所有单词。

for (int i = 0; i < words.size(); ++i) {
    cout << "Word " << (i + 1) << " is " << words[i] << endl;
}