[转贴] 一个关于C语言字串有趣的小题目
2010-08-26 15:21
281 查看
a = 1、b = 2、c = 3...以此类推,若输入字串abc时,表示1 + 2 + 3 = 6,若输入字串abcd时,表示1 + 2 + 3 + 4 = 10。
执行結果
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语言与其他语言不同之处。
#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语言与其他语言不同之处。
相关文章推荐
- C语言中关于指针,二维数组等的问题,一个有趣的发现
- C语言中的一个关于求正方形个数的算法题目
- C语言中的一个关于求正方形个数的算法题目
- 一个非常有趣的关于编程语言的描述
- Java关于23种设计模式的有趣见解(转贴)
- JVM 关于垃圾回收一个有趣的问题
- c语言:编辑一个有趣的死循环程序并对其修改,仅仅是一个“=”号的差别
- 转贴一个关于Junit测试Android开发的
- 关于二进制的一个题目
- 关于vxworks看门狗触发函数的优先级的一个有趣问题
- c语言中关于可变参数的一个用法实例
- 好文摘抄 [C语言]关于指针和int型的一道题目
- 一个关于值类型很有意思的题目
- 一个有趣的C语言问题:s = (++i) + (++i) + (++i)
- ubuntu - 一个有趣的关于 ubuntu 的漫画
- 很恶心的一个关于字符串的题目!
- 关于LINUX权限的一个题目
- 今天去面试了一家公司,有一个题目比较有趣
- 关于C语言中结构体定义的一个小问题
- 一个c语言题目