2014-08-27 155 views
0

我對編程非常陌生。我正在嘗試製作某種名稱生成器。使用字符串變量將短語分配給數字? C++

我想要做的是給一個名字和姓氏分配一個數字。

提示用戶輸入一個數字(讓我們說1-13),這會給他們他們的「名字」。

所以,像

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

而且相同的代碼與上述「姓」,但他們會輸入一個數字是14或更高。

我假設你會使用字符串..?我不知道什麼是最好的。

因此,什麼是最好的方式/我應該在哪裏看,去分配大量的名稱/文字給數字?

+0

您可能想要使用像'std :: map '(或者可能是'std :: vector ')。 – 2014-08-27 22:50:02

+0

我不完全清楚你的問題。當你說'給數字分配名稱/單詞'時,你的意思是你正試圖在它們之間建立關聯? 即你的意思是你試圖創造一些東西,其中1意味着'約翰',2意味'史蒂夫'等 – rdowell 2014-08-27 22:50:29

+0

是rdowell,我想創建一個協會,像你說的1意味着約翰,2意味着瑪麗,等。對於我的問題不清楚,抱歉,因爲我不太瞭解條款等。 – Vast 2014-08-27 23:06:55

回答

1

如果我理解正確的你需要的是兩個數組與姓和名。例如

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; 
+0

這也非常有幫助,非常感謝。這太糟糕了,我無法檢查兩個正確答案 – Vast 2014-08-27 23:09:20

2

將名稱存儲爲數組。或者某種字典。這裏有一個例子:

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

和你基本上用它作爲一個指標,即相關的數字:....

array[0] = "george" , array[1] = "john"等以後,如果你希望用戶可以使用輸入姓名vector,而不是這樣就可以使名單可變即:

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

names.push_back(name); 
+0

是的,這就是我們在這裏:D – Jay 2014-08-27 23:42:57

0

爲了將一個項目與另一個項目相關聯,一個好的數據結構是一個std::map

所以,如果你想13奧斯卡關聯,你可以用這個例子:

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奧利弗」,將有一個空時隙3和5

之間隨着std::map,沒有空時隙。

相關問題