小程序教程

(原創) 一個關於C語言字串有趣的小題目 (C/C++) (C)

字号+ 作者:H5之家 来源:H5之家 2017-01-06 08:03 我要评论( )

(原創) 一個關於C語言字串有趣的小題目 (C/C++) (C) Abstract 這是學弟的家庭作業,一個關於C語言字串有趣的題目。 Introduction a = 1、b = 2、c = 3...以此類推,若輸入字串abc時,表示1 + 2 + 3 = 6,若輸入字串abcd時,表示1 + 2 + 3 + 4 = 10。 C語言 1

(原創) 一個關於C語言字串有趣的小題目 (C/C++) (C)

Abstract
這是學弟的家庭作業,一個關於C語言字串有趣的題目。

Introduction
a = 1、b = 2、c = 3...以此類推,若輸入字串abc時,表示1 + 2 + 3 = 6,若輸入字串abcd時,表示1 + 2 + 3 + 4 = 10。

C語言

1 /*
2 (C) OOMusou 2008 3
4 Filename : cstring_sum.cpp
5 Compiler : Visual C++ 8.0
6 Description : Demo how to use abstract base class simulate interface
7 Release : 03/16/2007 1.0
8 */
9 #include <stdio.h>
10
11 void func(char *s) {
12 int sum = 0;
13
14 while(*s)
15 sum += (*s++ - 96);
16
17 printf("%d", sum);
18 }
19
20 int main() {
21 char s[27];
22 scanf("%s", s);
23 func(s);
24 }

執行結果

abc
6

14、15行

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
雖然是一個短短的程式,但可以看出老師們出這個作業的苦心,包含了很多C語言獨特的觀念。在The C Programming Language這本書使用while的機會遠比for多,主要是while若搭配pointer可以使用*s++寫法,在字串又可以用while(*s),這是C語言異於其他語言之處。

See Also
(原創) 如何一個字元一個字元的印出字串? (C)

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评