首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环效率- C++

循环效率- C++
EN

Stack Overflow用户
提问于 2010-01-22 17:26:55
回答 12查看 4.7K关注 0票数 8

初学者提问,上循环效率。我已经开始使用C++ (我的第一种语言)编程,并且一直在使用Bjarne Stroustrup的“使用C++的原则和实践”。我一直在学习前面的章节,并且刚刚被介绍了循环的概念。

关于循环的第一个练习要求我这样做:字符'b‘是char('a'+1),'c’是char('a'+2),依此类推。使用一个循环写出一个字符表及其相应的整数值:

A 97,b 98,...,z 122

尽管我使用了大写,但我创建了以下内容:

代码语言:javascript
复制
int number = 64; //integer value for @ sign, character before A
char letter = number;//converts integer to char value
int i = 0;

while (i<=25){
    cout << ++letter << "\t" << ++number << endl;
    ++i;
    }

我的目标是在循环中只出现'i‘,还是在类型之间转换时根本不可能?除了将字符值转换为其对应的整数(即与当前方法相反),或者根本不进行转换而将字母存储为“@”之外,我实在想不出还有什么其他方法可以做到这一点。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-01-22 17:34:16

你应该首先以清晰为目标,然后尝试微优化。您最好将其重写为for循环:

代码语言:javascript
复制
const int offsetToA = 65;
const int numberOfCharacters = 26;
for( int i = 0; i < numberOfCharacters; ++i ) {
    const int characterValue = i + offsetToA;
    cout << static_cast<char>( characterValue  ) << characterValue << endl;
}

您可以在不同的类型之间进行转换-这称为类型转换(上面代码中的static_cast构造)。

票数 8
EN

Stack Overflow用户

发布于 2010-01-22 17:38:35

从jk开始,你甚至可以在循环中使用字母本身(字母<= 'z')。我也会使用for循环,但这只是我的情况。

代码语言:javascript
复制
for( char letter = 'a'; letter <= 'z'; ++letter )
    std::cout << letter << "\t" << static_cast<int>( letter ) << std::endl;
票数 22
EN

Stack Overflow用户

发布于 2010-01-22 17:35:09

这样做没有什么特别低效的地方,但当然可以只在chars和it之间进行转换( char是一个整型)。这意味着您只需要存储1个计数器,而不是当前拥有的3个(i,字母+数字

此外,对于从固定的开始到结束的循环,' for‘循环可能更惯用(尽管您可能还没有遇到这个问题!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2116221

复制
相关文章

相似问题

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