在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
http://www.cnblogs.com/robin-ty/archive/2010/09/03/1817294.html
交流纽带” --《C语言程序设计 现代方法》
写多了 Java 代码,对 String 类 很是喜爱,可惜经典的 C 语言没有。。。最近在做程序过程中,发现对C语言字符串的处理很模糊,一会儿用数组,一会儿用指针,一会儿又引入 string.h。。。于是决定总结一下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); return0; }
运行结果如下:
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 函数一样,标准函数会自动在输入字符串的末尾放置一个空字符串。然而,如果自己写输入函数,必须要考虑到这一点。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论