【问题标题】:Using string variable to assign phrases to numbers? C++使用字符串变量将短语分配给数字? C++
【发布时间】:2014-10-21 16:25:54
【问题描述】:

我对编程很陌生。我正在尝试制作某种名称生成器。

我想做的是为名字和姓氏分配一个数字。

提示用户输入一个数字(比如说 1-13),这会给他们他们的“名字”。

所以,像

cout << " Enter a number between 1 and 13; ";
cin >> first_name;

和上面的“姓氏”代码相同,除了他们会输入一个 14 或更高的数字。

我假设您将使用字符串..?我不知道什么是最好的。

那么..什么是最好的方法/我应该去哪里看,去给数字分配很多名字/单词?

【问题讨论】:

  • 您可能想要使用std::map&lt;int, string&gt;(或者std::vector&lt;string&gt;)之类的东西。
  • 我对你的问题并不完全清楚。当您说“将名称/单词分配给数字”时,您的意思是您正在尝试在它们之间建立关联吗?即你的意思是你正在尝试创建一个输入 1 表示“约翰”、2 表示“史蒂夫”等的东西
  • 是的,rdowell,我正在尝试创建一个关联,就像您说的那样,1 表示约翰,2 表示玛丽,等等。抱歉,我的问题不清楚,因为我不太了解这些术语等。

标签: c++ string variables generator


【解决方案1】:

将名称存储为数组。或者某种字典。这是一个例子:

 int array = {"george", "john", "daniel", "stu"} 

并且您基本上将与之关联的数字作为索引,即: array[0] = "george" , array[1] = "john" ....等

稍后,如果您希望用户输入名称,您可以使用 vector 代替,这样您就可以使名称列表可变,即:

std::vector<std::string> names;
cin>> name;

names.push_back(name);

【讨论】:

  • 是的,这就是我们来这里的目的:D
【解决方案2】:

如果我正确理解了您所需要的只是两个包含名字和姓氏的数组。例如

const size_t FNAMES_SIZE = 13;
const size_t LNAMES_SIZE = 13;

const char *fname[FNAMES_SIZE] = { "John", "Mathew", "Bob", /*other names */ };
const char *lname[LNAMES_SIZE]  = { "Johnson", "Bush", "Cannedy", /*other names */ };

cout << " Enter a number between 1 and " << FNAMES_SIZE << "; ";
cin >> first_name;

cout << "Your first name is " << fname[first_name - 1] << endl;

cout << " Enter a number between " << FNAMES_SIZE + 1 
     << " and " << FNAMES_SIZE + LNAMES_SIZE << "; ";
cin >> last_name;

cout << "Your last name is " << lname[last_name - FNAMES_SIZE - 1] << endl;

【讨论】:

  • 这也很有帮助,非常感谢。太糟糕了,我不能检查两个正确的答案n
【解决方案3】:

为了将一个项目与另一个相关联,一个好的数据结构是std::map

因此,如果您想将 13 与 Oscar 相关联,可以使用以下示例:

typedef std::map<unsigned int, std::string> Name_Container;
Name_Container first_name_table;
//...
first_name_table[13] = "Oscar";

std::map 也称为关联数组字典

向量的一个问题是,根据用户输入的索引号,可能存在孔或空槽。

如果用户输入“3 Fred”,则向量[3] == “Fred”。除非您将向量扩展为包含 3 个以上的插槽,否则这将是未定义的行为。

如果用户接下来输入“5 Oliver”,则在 3 和 5 之间会有一个空槽。

使用std::map,没有空槽。

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2011-01-20
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多