首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stroustrup第4章练习6:提高效率

Stroustrup第4章练习6:提高效率
EN

Stack Overflow用户
提问于 2012-10-07 10:35:16
回答 3查看 804关注 0票数 0

该练习要求一个代码,该代码可以将数字0-9的用户输入分别作为整数或字符串转换为字符串或整数,即如果输入0,则输出"zero",反之亦然。

代码语言:javascript
复制
string number;

cout << "Let's convert strings to numbers."
     << "Enter value/string of 0-9";

while (number!= "exit")
{
    cin >> number;

    for (int i=0; i < digits.size(); i++) 
    {
        if (number == digits[i]) cout << i << endl;
    }   


    if (number == "0")      cout << digits[0] << endl;
    else if (number == "1") cout << digits[1] << endl;
    else if (number == "2") cout << digits[2] << endl;
    else if (number == "3") cout << digits[3] << endl;
    else if (number == "4") cout << digits[4] << endl;  
    else if (number == "5") cout << digits[5] << endl;  
    else if (number == "6") cout << digits[6] << endl;  
    else if (number == "7") cout << digits[7] << endl;
    else if (number == "8") cout << digits[8] << endl;  
    else if (number == "9") cout << digits[9] << endl;  
}

位是一个向量类,它存储字符串"zero""one"等。

这段代码工作得很好,但是,我不喜欢,它是if/else if语句的长链,但我无法找到将整数转换为字符串的方法。有人能帮我提高效率吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 10:42:50

您可以使用这个if number == "0",然后是number[0] == '0',也就是char

相反,如果/else声明:

代码语言:javascript
复制
if (number[0] >= '0' && number[0] <= '9' )
  std::cout << digits[number[0] - '0'] << std::endl;
else
  std::cout << "wrong input - needs to be digit" << std::endl;

string基本上是一个字符数组,std::string是一个类型为char的字符数组。例如,这是在c或c++中声明和初始化字符串的两种合法方法

代码语言:javascript
复制
char s[3] = { '0', '1', '\0' }; 
char s[3] = "01";

Char值在技术上是整数(或者更确切地说是字节),它以某种编码(通常是ASCII)存储字符代码。例如,'0'的字符代码是48'1'的字符代码是49‘2’< code >E 217是E 11850<代码>E 219。我们用这个,因为我们知道

代码语言:javascript
复制
'3' - '0' = 51 - 48 = 3
票数 3
EN

Stack Overflow用户

发布于 2012-10-07 10:38:31

您可以使用digits[number[0] - 48]来消除if/else。

票数 1
EN

Stack Overflow用户

发布于 2012-10-07 20:02:14

只需使用等位数来检查它是否为0-9 http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

如果是数字,可以使用aoti http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/将其转换为int。

最后只需要说

代码语言:javascript
复制
cout << digits[aoti(number)];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12768032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档