文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C语言中字符串的处理方式(二)

C语言中字符串的处理方式(二)

时间:2010-09-03  来源:Robin_TYUT

续前《C语言中字符串的处理方式(一)》

3. 字符串的读写


  3.1 用 printf 函数和 puts 函数写字符串

  %s 允许 printf 函数写字符串。如:

char str[] = "Are we having fun yet?";
printf(
"Value of str: %s\n", str);

如果只显示字符串的一部分,可以用 %.ps。这里的 p 是要显示的字符数量。语句

printf("%.6s\n", str);

会显示出

Are we

  C函数库还提供puts函数。

puts(str);

  

  3.2 用 scanf 函数和 gets 函数读字符串

  在 scanf 函数调用中,不需要在 str 前添加运算符 &。因为 str 是数组名,编译器会自动把它当作指针来处理。调用时,scanf 函数会跳过空白字符,然后读入字符,并且把读入的字符存储到 str 中,知道遇到空白字符为止。scanf 函数始终会在字符串末尾存储一个空字符。用 scanf 函数读入字符串永远不会包含空白字符。因此,scanf 函数通常不会读入一整行输入。换行符会使 scanf 函数停止读入,空格符或制表符也会产生同样的效果。可以参考下面的例子:

#include <stdio.h>

#define STR_LEN 80

int main()
{
char str[STR_LEN + 1];
printf(
"input a string:");
scanf(
"%s", str);
printf(
"String inputed is:%s\n", str);
return 0;
}

运行结果如下:

Input a string:this is a string
String is
:this
为了每次读入一整行输入,可以使用 gets 函数。类似于 scanf 函数,gets 函数把读入的字符放到数组中,然后存储一个空字符。然而,在其他方面 gets 函数有些不同于 scanf 函数:

  (1) gets 函数不会在开始读字符串之前跳过空白字符( scanf 函数会跳过)。

  (2) gets 函数会持续读入直到找到换行符才停止(scanf 函数会在任意空白字符处停止)。

  此外,gets 函数会忽略掉换行符,而不会把它存储到数组中,用空字符代替换行符。

 

  3.3 逐个字符读字符串

  因为 scanf 函数和 gets 函数都有风险且不够灵活,C 程序员经常会编写自己的输入函数。通过每次一个字符的方式来读入字符串。下面是自己编写的读取字符串的函数 read_line():

int read_line(char strp[], int n)
{
char ch;
int i = 0;

while((ch = getchar()) != '\n')
if(i < n)
str[i
++] = ch;
str[i]
= '\0'; /* terminates string */
return i; /* number of characters stored */
}
返回之前,read_line 函数在字符串的末尾放置了一个空字符。就像 scanf 函数和 gets 函数一样,标准函数会自动在输入字符串的末尾放置一个空字符串。然而,如果自己写输入函数,必须要考虑到这一点。

 

to be continued...

  

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载