我正处于用C ++编写程序的早期阶段,该程序用其英文对应物替换整数输入。我不需要有关如何制作此程序的说明,而希望了解代码的特定部分如何以特定方式运行,并可能提示如何修复它。
std::string strToEng(std::string s)
{
int sInt = atoi(s.c_str());
std::string digit1[] = {"zero", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
switch(s.size())
{
case 1:
{
int temp = int(s[0]);
return digit1[temp];
}
}
return "error";
}
问题出在switch语句中的digit1数组中。当我编译此代码时,情况1未返回所需的输出。如果我将digit1 [temp]更改为某种常数(即digit1 [3]),它将正确显示。使用变量对数组建立索引是否存在问题?我该如何解决?
编辑:也许欺骗性的是我没有办法处理高于9的数字,但它们仍包含在digit1中。原因是此代码已被重写多次。
最佳答案
您应该使用digit1[sInt]
,因为您已经将字符串转换为int值...s[0]
只是字符串的第一个字符,因此,如果第一个字符为'0'
,则其值为48(请参见ASCII表),然后您可以访问表的第49个元素... 1,您可以尝试int(s[0])-'0'
,它应该可以工作。