📄 c75.htm
字号:
<p>一个除了空字符之外不包括任何字符的串在C
语言中有一个特殊的名字: <font color="#FF0000">空串</font>。空串的使用和第四课中我们介绍的所有函数都是一致的。<br>
有时候将字符串的值设为空串是很有价值的, 在 C 语言中,
空串是由一对紧挨着的双引号表示的。<br>
<br>
static char buffer[10] = "";这样, 语句就定义了一个叫 buffer
的字符数组并将它的值设为空串。<br>
<br>
字符串 "" 与字符串 " "是不同的,
因为第二串中有一个空白字符。 (如果你感到怀疑的话,
将两个串送入 strcmp 函数比较一下返回结果就清楚了。)<br>
</p>
<p align="right"><a href="c75.htm#_top.html#_top">返回页首</a></p>
</blockquote>
<hr>
<h3><a name="c753"></a>3.字符转换和算术运算</h3>
<blockquote>
<p><font color="#FF0000">字符变量和常量</font>在关系和算术表达式中是经常使用到的。为了在这种情况下正确使用字符,
你有必要了解一下 C 编译器是如何处理它们的。<br>
<br>
每当在 C 语言中的表达式中使用一个字符变量或常量时,
它被系统自动地转换成<font color="#FF0000">整数值</font>,
而且以后被当作整数对待。在字符被当作参数传递给函数时,
也同样处理: 它们被系统自动转换成整数。<br>
<br>
例如, 在 ASCII 码记法中, 'a' 的值是 197, 'b' 的值是 198, 'z' 的值为 122,
这样, 用下边的表达式就可以判断 c 是否包含小写字母。<br>
表达式 c >= 'a' && c <= 'z'<br>
<br>
由于把 c 与 'a' 和 'z' 进行比较时,实际上比较的是 'a' 和 'c'
的数值表示, 下边的表达式可以被等价地用来判断 c
是否是一个小写字母。<br>
c >= 97 && c <= 122<br>
<br>
表达式的头一种形式更好一些, 因为它不需要知道关于字符 'a' 和 'z'
`的具体数值, 而第二种形式的意图是很不明显的。<br>
<br>
因为 C
编译器自动将表达式中的或是传递给函数作参数的所有字符转换成整数,所以下边的printf
调用可以用来打印你的机器上内部实现方式中 c 的值。<br>
例子 printf("%d\n", c);<br>
例如, 如果你的机器使用 ASCII 码,
那么右边的语句将在终端上打印出值 197。<br>
<br>
你认为下边的两个语句会有什么结果? <br>
c = 'a' + 1;<br>
printf("%c\n", c);<br>
<br>
由于 ASCII 码中 'a' 的值是 197 第一个语句的结果就是将值 198
赋给字符变量 c。由于这个值代表 ASCII 码中字符 'b', 这就是调用
printf 将要显示的结果。结果是 b<br>
<br>
上面的例子给了一种我们可以将 '0' 到 '9'
之间的字符转换成其相应的整数值 0 到 9 的重要技巧。 请回忆一下,
我们曾经提到过字符 '0' 和整数 0 不同, 字符 '1' 和整数 1 也不相同,
以此类推。<br>
<br>
事实上,字符 '0' 在 ASCII 码中有值 48, 也就是下边调用 printf
的打印结果。<br>
printf("%d\n", '0');<br>
<br>
假设字符变量 c 包含字符 '0' 到 '9'
之间的某一字符并且我们希望将这个值转换成 0 到 9 之间的相应整数,
由于数字在所有字符集中都是由一系列连续整数值表示的,
我们很容易通过与字符常量 '0' 相减的方法求出与 c 相应的整数值。<br>
例如: i 是 5。<br>
int i;<br>
char c;<br>
... ...<br>
c = '5';<br>
i = c - '0';<br>
<br>
我们可以使用上面的技术将<font color="#FF0000">数字</font>组成的字符串转换成其相应的数值表示。一旦遇到一个<font
color="#FF0000">非数字字符</font>, 函数就结束了它对字符串的扫描,
然后把结果返回到调用函数。<br>
<a
href="javascript:showwin('c75_31.htm',null,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,copyhistory=0,width=700,height=600')">请看例子</a><img
src="../img/lefthand.gif" alt="lefthand.jpg (983 bytes)" WIDTH="45" HEIGHT="20"></p>
<p align="right"><a href="c75.htm#_top.html#_top">返回页首</a></p>
</blockquote>
<hr>
<h3><a name="c754"></a>4.字符串,结构和数组</h3>
<blockquote>
<p>有许多方法可以将C
语言中的基本元素组合起来形成强有力的程序结构。在这一课里,
我们将给出一个例子, 结合<font color="#FF0000">变长字符串</font>来说明<font
color="#FF0000">结构数组</font>。<br>
<br>
假设我们想写一个使用起来象字典一样的程序,
只要我们有这样一个程序,
我们就可以在遇到不知道意义的词时使用它。我们需将这个词输入程序,
程序会在字典中自动 "查找"
这个词并且告诉我们这个词的含义。<br>
<br>
我们可以定义一个叫 entry 的结构来放词和它的定义。我们已经为 9
个字母的词, 以及 149 个字符的词的定义定义了足够用的空间。<br>
<br>
struct entry<br>
{<br>
char word[10];<br>
char definition[50];<br>
};<br>
<br>
我们可以定义一个 entry 结构数组用于我们的字典, 来提供 100
个词的内容。我们的字典是按字典序组织的, 以便于查找。<br>
<br>
struct entry dictionary[100];<br>
<br>
现在是考虑如何在字典中查找一个词的时侯了。<br>
<font color="#FF0000">线性查找</font>的方法是最直观的,
但相当慢。我们将介绍一个叫<a
href="javascript:showwin('c75_41.htm',null,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,copyhistory=0,width=900,height=600')"><font
color="#FF0000">二分查找的算法</font></a>。<img src="../img/lefthand.gif"
alt="lefthand.jpg (983 bytes)" WIDTH="45" HEIGHT="20"></p>
<p align="right"><a href="c75.htm#_top.html#_top">返回页首</a></p>
</blockquote>
<hr>
<h3><a name="c755"></a>5.命令行参数</h3>
<blockquote>
<p><font color="#FF0000">命令行</font>是你运行你的程序时键入的一行命令。假设我们有一个叫做
fuss 的文件, 那么命令行将会这样: <br>
%fuss 或 A>fuss (用两种常用系统提示符。)<br>
<font color="#FF0000">命令行参数</font>是在一行中的附加项: A>fuss -r
Ginger<br>
<br>
关于C
语言程序的一个很好的方面就是它可以读入这些项目作为己用。这种机制是在
main() 中加入参数。这里有一个典型的例子: <br>
例子(文件名为 echo.c )<br>
main(int argc, char *argv[])<br>
{<br>
int count;<br>
for (count=1; count<argc; count++)<br>
printf("%s ", argv[count]);<br>
printf("\n");<br>
}<br>
<br>
<img src="../img/c755.gif" alt="c755.gif (29566 bytes)" align="right" WIDTH="190"
HEIGHT="180">将该程序放入一个叫 echo 的可执行文件中, 然后的情况如下:
<br>
输入 A>echo I could use a little help<br>
输出 I could use a little help<br>
<br>
C 编译器可以给 <font color="#FF0000">main()</font> 提供两个参数,
第一个参数是 <font color="#FF0000">int argc</font>,它的值为命令后面串的个数加一,
这样我们的例子中, argc 的值为 7 。第二个参数 <font color="#FF0000">char
*argv[]</font> 是一个包含串指针的数组,
数组中的每一个元素为指向每个串的指针, 并且 argv[0]指向命令名字符串。<br>
<br>
许多程序还有使用 argv 的不同说明: char **argv 实际上和 char *argv[]
等价。你可以把 argv 当作一个指向字符指针的指针来读它。<br>
main(int argc, char **argv)<br>
<br>
命令行参数的一个十分平常的用法是指出<font color="#FF0000">程序的任选项</font>。<br>
<a
href="javascript:showwin('c75_51.htm',null,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,copyhistory=0,width=600,height=600')">请看例子</a>。<img
src="../img/lefthand.gif" alt="lefthand.jpg (983 bytes)" WIDTH="45" HEIGHT="20"></p>
<p align="right"><a href="c75.htm#_top.html#_top">返回页首</a></p>
</blockquote>
<p> </p>
<p align="center"><a href="http://www.nec.sjtu.edu.cn/support/Course/C/c/c7/c76.htm"><img src="../img/next.gif" width="145" height="30"
alt="next.gif (3633 bytes)" border="0"></a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -