在单词中添加数字以调用变量

时间:2012-12-02 11:23:57

标签: c++

请你好,我是一个全新的。

我有一个从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 *。

这可能吗?

3 个答案:

答案 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;