您的位置:首页 > 编程语言 > C语言/C++

[转贴] 一个关于C语言字串有趣的小题目

2010-08-26 15:21 281 查看
a = 1、b = 2、c = 3...以此类推,若输入字串abc时,表示1 + 2 + 3 = 6,若输入字串abcd时,表示1 + 2 + 3 + 4 = 10。

#include <stdio.h>

void func(char *s) {
int sum = 0;

while(*s)
sum += (*s++ - 96);

printf("%d", sum);
}

int main() {
char s[27];
scanf("%s", s);
func(s);
}


执行結果

abc
6

6、7行

while(*s)
sum += (*s++ - 96);

由于C语言字串以'\0'为結尾的特性,所以我们大胆地使用while(*s != '\0'),又因C语言『非0为true』的特性,所以可省略成while(*s),若你习惯其他程式语言,看到这种写法一定很不习惯,但这在C语言这种写法是司空见惯,已经沒有所谓『容不容易阅读的问题』。

a = 1、b = 2、c = 3....是否应该做一个阵列做查表呢?C语言字元有一个很特別的特性:『一个字元也等于其ASCII值』,也就是说 a = 97、b = 98、c = 99,所以我只要將每个字元的ASCII值减去96就变成1、2、3了。

*s++,这也是C语言常见的写法,在The C Program Language这本书到处都是,即:先对s指标取值,取完后指针+1,初学者一定很不习惯这种写法,但这已经是C语言的文化之一。

Conclusion
在The C Programming Language这本书使用while的机会远比for多,主要是while若搭配pointer可以使用*s++写法,在字串又可以用while(*s),这是C语言与其他语言不同之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: