您没有来错地!为了更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 电脑技术 查看内容

C语言:字符串详解

2009-11-20 14:39| 投稿: computer

摘要: 字符串数组1. 字符串数组的定义与使用 1 2 3 4 5 6 7 8 #include "stdio.h" void main() { char abc[...
字符串数组1. 字符串数组的定义与使用 1 2 3 4 5 6 7 8 #include "stdio.h" void main() { char abc[15]; printf("input a string:"); scanf("%s",abc); printf("%s",abc); } 当输入是abc124a时输入输出如下表示:input a string:abc124aabc124a 当输入是123 abc时输入输出如下表示:input a string:123 abc123注意:把一个字符数组看成字符串后,可以直接使用%s来输入输出,后面直接使用数组名。用%s读入时,表示需要读入一个字符串到字符数组中,遇到第一个空格或回车,读入即停止。读入时还需要特别注意的是定义的字符数组的长度应该要大于读入数据的长度。用%s输出时,要注意的是输出的是字符串的实际长度的那些字符,而不是输出定义时的字符数组的长度。如: 1 2 3 4 5 6 7 8 9 10 #include "stdio.h" void main() { char abc[5]; int i; abc[4]='K'; printf("input a string:"); scanf("%s",abc); printf("%s",abc); } 输入输出如下:input a string:2q2q 这个例子中,abc[]数组的第五个元素是’k’字符,但是读入这个字符串时只用到了2个元素,即abc[0]=2abc[1]=q而%s输出时仅仅输出了2q这两个字符,那么字符串输出是怎么知道结束了的呢?这里会使用到一个默认的字符串结束标志字符’\0’,即此时读入时,会在末尾自动加上abc[2]=’\0’,所以输出时从字符串的头即0号元素即数组的首地址一直输出到’\0’为止,并且这个结束字符本身不会输出。再如: 1 2 3 4 5 6 7 8 9 #include "stdio.h" void main() { char abc[30]="abab adda"; int i; printf("%s\n",abc); for(i=0;i<30;i++) printf("%c",abc[i]); } 输入输出如下:abab addaabab adda需要注意的是,这个字符串中有个空格字符,如果用到%s输入时,会怎样呢? 1 2 3 4 5 6 7 #include "stdio.h" void main() { char abc[30]; scanf("%s",abc); printf("%s",abc); } 输入输出如下:abab addaabab因为%s读入遇到空格就结束了。那么要怎么样才能把具有空格的字符串读入到数组中呢,比如要保存”I love this game”这个字符串,应该怎么做? 1 2 3 4 5 6 #include "stdio.h" void main() { char abc[30]="I love this game "; printf("%s\n",abc); } 第一种方法是变量赋初值。I love this game共16个字符,但对于字符串来说,一共使用了17个空间,即abc[0]~abc[15]共16个来存放实际的字符abc[16]存放字符串结束标志字符’\0’ 1 2 3 4 5 6 7 8 9 10 #include "stdio.h" void main() { char st[16]; int i; for(i=0;i<16;i++) scanf("%c",&st[i]); for(i=0;i<16;i++) printf("%c",st[i]); } 输入:I love this game第二种方法是用%c读入,但是要注意范围。这里只使用了16个空间。如果使用变量赋初值,也可以简化为这样: 1 2 3 4 5 #include "stdio.h" void main() { char abc[]="abdfsdfd"; printf("%s",abc); } 这个程序主要是简化了abc[]数组的大小,通过编译系统的自动处理,效果等同于char abc[9] =”abdfsdfd”; 2. 字符串数组与指针通过前面的知识,我们知道数组名表示的是这个数组的首地址,而指针变量是可以用来保存地址的。实例:程序功能:把一个字符串中的数取出来,构成一个整数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include "stdio.h" void main() { char abc[]="a2b1d65fd"; char *p=abc; int sum=0; printf("%s\n",abc); while(*p!='\0') { if(*p>='0' && *p<='9') sum=sum*10+*p-'0'; p++; } printf("sum=%d",sum); } #include "stdio.h" int qushu(char *st) { int add=0; while(*st!='\0') { if(*st>='0' && *st<='9') add=add*10+*st-'0'; st++; } return add; } void main() { char abc[]="a2b1d65fd"; char *p=abc; int sum; printf("%s\n",abc); sum=qushu(abc); printf("sum=%d",sum); } 3. 字符串常见函数1) 字符串输出函数 puts格式: puts (字符数组名)功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串. 1 2 3 4 5 6 #include "stdio.h" void main() { static char c[]="qq2009\nxulei"; puts(c); } 输出结果:qq2009xulei 遇到\n字符,换行处理。注意:puts函数完全可以由printf函数取代。 当需要按一定格式输出时,通常使用printf函数。2) 字符串输入函数gets格式: gets (字符数组名)功能:从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。 1 2 3 4 5 6 7 #include "stdio.h" void main() { char st[15]; printf("input string:"); gets(st); puts(st); } 输出结果:input string:I love this gameI love this game 用gets函数可以获取有空格的字符串。可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志, 而只以回车作为输入结束。这是与scanf函数不同的。3) 测字符串长度函数strlen格式: strlen(字符数组名)功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。strlen函数是一个系统函数,可直接调用,返回测试字符串的实际长度。 1 2 3 4 5 6 7 8 9 10 11 12 13 #include "stdio.h" #include "string.h" void main() { int k; char st[]="I love this game"; k=strlen(st); printf("The lenth of the string is %d\n",k); } 输出结果: The lenth of the string is 16   当我们用到字符串的一些库函数时,往往会使用#include "string.h"这句。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include "stdio.h" int strlenMe(char *p) { int i=0; while(*p!='\0') {i++;p++;} return i; } void main() { char st[]="I love this game"; int k; k=strlenMe(st); printf("st的长度是%d",k); }

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部