请你好,我是一个全新的。
我有一个从num1到num90的变量(字符串)列表。我需要通过将一个int中的数字添加到单词num。
来从函数中调用它们任务是将数字转换为“跳入c ++”中的单词......我可能不会以“正确”的方式进行操作,但这部分已经停止了我一段时间!!
我这样想:
#include <iostream>
#include <string>
using namespace std;
// Hard code numbers to 20 and then in tens to 90
string num1 = "one";
string num2 = "two";
string num3 = "three";
string num4 = "four";
string num5 = "five";
string num6 = "six";
string num7 = "seven";
string num8 = "eight";
string num9 = "nine";
等等......高达90
int main ()
{
// Break the number down into three digit blocks
int num = 0;
cout << "Please enter the number: ";
cin >> num;
while (num > 999)
{
int digit = (num % 1000);
num = ((num - digit)/1000);
//cout << digit << '\n';
//cout << num << '\n';
// For each block of numbers work out hundreds,
if (digit > 100)
{
int i = digit;
int j = (i % 100);
cout << num.append(j) << " hundred";
}
我需要发生的是存储在'j'中的数字,用于标记单词num以便调用字符串num *。
这可能吗?
答案 0 :(得分:3)
当然,请使用地图:
#include <map>
#include <string>
#include <iostream>
std::map<int, std::string> words { { 1, "one" }, { 2, "two" }, { 3, "three" } };
int main()
{
std::cout << words[1] << std::endl;
}
你可能不得不处理一些特殊情况(最多二十个?),你需要一个单词“百”等等。如果你想让它变得国际化,你就必须更加思考。
答案 1 :(得分:2)
我需要发生的是存储在'j'中的数字以进行标记 单词num以便调用字符串num *。
这种方法的问题在于你的代码中使用的任何变量名都没有被编译:程序运行时它会操纵变量的值,但它不知道或不关心你决定使用这个名字“num3”而不是“numero3”或“foobar”。
如果你想在数字(3)和字符串(“三”)之间建立一个链接,那么你可以使用一个Vector(@Mark建议,虽然你会在20或更好之后遇到问题)仍然是一个Map(如@Kerrek建议的那样):这些都可以工作,因为在这两种情况下,字符串都由变量的值引用(例如数字的值在lookup[digit]
中,或words[1]
中的字面值 1 ),而不是变量的名称。
编辑:
有兴趣,这是使用'if'和'switch'的版本......
#include <iostream>
#include <string>
using namespace std;
string units2word(int units){
switch (units){
case 0: return "zero";
case 1: return "one";
case 2: return "two";
case 3: return "three";
// etc ...
case 18: return "eighteen";
case 19: return "nineteen";
}
}
string tens2word(int tens){
switch(tens){
case 2: return "twenty";
case 3: return "thirty";
// etc ...
case 9: return "ninety";
}
}
string num2words(int num) {
if (num > 99 && num%100 == 0) return units2word(num/100) + " hundred";
if (num > 99) return units2word(num/100) + " hundred and " + num2words(num%100);
if (num < 20) return units2word(num);
if (num%10 == 0) return tens2word(num/10);
return tens2word(num/10) +"-"+ units2word(num%10);
}
int main(int argc, char *argv[]) {
int num = -1;
while( num < 0 || num > 999){
cout << "Please enter a number between 0 and 999: ";
cin >> num;
}
cout << "You typed: " << num2words(num) << endl;
}
答案 2 :(得分:1)
你应该看看使用std :: vector。这为您提供了一个带索引的变量
std::vector<std::string> lookup;
lookup.push_back( "zero" ); // starts at lookup[0]
lookup.push_back( "one" );
lookup.push_back( "two" );
// etc
// then
std::cout << lookup[digit] << std::endl;
std::cout << lookup[num] << std::endl;