(原創) 一個關於C語言字串有趣的小題目 (C/C++) (C)
這是學弟的家庭作業,一個關於C語言字串有趣的題目。
Introduction
a = 1、b = 2、c = 3...以此類推,若輸入字串abc時,表示1 + 2 + 3 = 6,若輸入字串abcd時,表示1 + 2 + 3 + 4 = 10。
C語言
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
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 }
執行結果
6
14、15行
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)
(原創) 一個關於C語言字串有趣的小題目 (C/C++) (C)相关推荐
- (原創) 如何一個字元一個字元的印出字串? (C/C++) (C)
Abstract 若只能一個位元一個位元的印出字串,你會怎麼印呢? Introduction 我同學要將字串送到硬體,但硬體所提供的API,一次只能送一個字元,在這裡我們模擬這個情境,一個字元一個字元 ...
- contains an invalid path : 1包涵無效路徑,2文件名和系統語言衝突或其他問題
contains an invalid path : 1包涵無效路徑,2文件名和系統語言衝突或其他問題 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变 ...
- solr set java opts_關於 Apache Solr 無法啟動的問題
你好,我的作業環境是 Windows Server 2008 R2 , Apache Tomcat/8.0.15 , Solr 的版本是 4.10.2 我安裝 Solr 的方式如下: ------- ...
- vfp和python比较_(原創) 由C/C++看VFP (技術感想) (C++/VFP)
我覺得C++整個語言其實一直在做兩件事情 1.讓靜態語言的C++盡量提供動態的功能 2.讓C++提供資料處理的功能 動態功能: 1.多型:C++利用inheritance + dynamic bind ...
- (原創) 日文與我 (Japanese) (日記)
Abstract 剛剛翻了一下大一學的一年日文,才發現原來我日文還學過這麼多東西.... Introduction 我對日文的接觸,開始於國一,當時對中森明菜驚為天人,開始聽日本歌,學習50音,然後開 ...
- (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)...
Abstract 由於記憶體便宜,不少人購買新NB時,基於一次到位原則,一次將X61的記憶體加到4GB攻頂,雖然X61的硬體抓的到4GB,但卻沒保證軟體的作業系統可以抓到4GB,只要是32位元的Win ...
- (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows)
原文地址为: (原創) 如何讓ThinkPad X61在32位元Windows XP『用』到4GB記憶體? (NB) (ThinkPad) (OS) (Windows) Abstract 由於記憶體便 ...
- 在delphi中嵌入腳本語言--(譯)RemObjects Pascal Script使用說明(1)(譯)
在delphi中嵌入腳本語言--(譯)RemObjects Pascal Script使用說明(1)(譯) http://blog.csdn.net/truexf/article/details/15 ...
- (原創) 如何將編譯結果,統一放在一個目錄下? (SOC) (Quartus II)
Abstract Quartus II預設會將所有檔案都放在project的根目錄下,導致根目錄檔案過多,管理不便,若能將編譯的結果統一放到其他目錄下,將有助於日後管理. Introduction 使 ...
- (原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
Abstract 撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-tim ...
最新文章
- nutz微信应用开发项目 nuby
- SDH/E1/T1/E3/T3/STM/TDM相关名词介绍
- svn git 导入本地文件到远程服务器 import
- WCF创建到使用到发布
- RedisTemplate实现事物问题剖析和解决
- java–Servlet基础
- linux下java转储线程_Java线程转储prio值与linux上的真实线程优先级不对应?
- (09)Vivado IO约束
- 三国演义词云的python代码_词云制作没那么难,Python 10 行代码就实现了!
- 计算机网络实验【静态路由】
- python类库31[命令行解析]
- 开源3D游戏引擎Irrlicht简介
- 查看mysql数据库密码_如何查看mysql数据库的登录名和密码
- 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON9简易测试系统
- 宝塔面板怎么实名认证_云服务器安装宝塔面板完整教程
- The Things Network LoRaWAN Stack V3 学习笔记 2.5 LoRa节点配置接入
- 使用npm下载包,报错 error An unexpected error occurred: “EPERM: operation not permitted
- 大气科技类企业织梦整站模板
- eai java_关于EAI,ETL与EII
- CANoe.DiVa 操作指南 - 时间参数配置