今天开始学习字符串,学完以后最低要做到了解什么是字符串,以及字符串的一些应用方法,毕竟字符串还是很常见的.
简单的字符串"helloworld",这个字符串大家应该都很眼熟,学编程的第一站啊~
"helloworld"这就是一个字符串,注意S是大写的,‘h‘这样的是一个字符对应的数据类型名char,很多个字符组合在一起就是一个字符串了,注意字符串是用双引号(" ")引起来的哦,可不是‘h‘‘e‘‘l‘‘l‘‘o‘这样简单粗暴的组合在一起哦...
字符串与字符数组:
字符串:在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串.
字符数组:字符数组和字符串的区别是:字符串的末尾有一个空字符 ‘\0’[A1]
[A1]对应的ascii码值:0
字符串的初始化
定义并初始化一个字符串的方法:
char name[15]={ ‘W‘, ‘a‘, ‘n‘, ‘g‘, ‘L‘, ‘i‘, ‘\0‘};
har name[15] = "WangLi";
char password[] = "012345678";
字符串的输出”%s”,最后的’\0’是不会输出的.
字符串I/0函数
char name[10];
gets(name);[A1]
puts(name);[A2]
[A1]从键盘上读入一个完整的行,存入字符数组name。并用空字符‘\0‘取代行尾的换行符‘\n‘。
[A2]把字符数组中的字符串输出到显示器。
示例:
//字符串 void testString() { char name[20]; char address[20]; char job[10]; //scanf("%s",name); //使用scanf时不能输入空格,不然会截断. //printf("%s",name); printf("请输您的入姓名:\n"); gets(name);//获取用户输入的一行数据并将其保持到name中 printf("请输您的入地址:\n"); gets(address);//获取用户输入的一行数据并将其保持到name中 printf("请输入您的工作:\n"); gets(job);//获取用户输入的一行数据并将其保持到name中 printf("--------------------------------\n"); puts(name);//向显示器输出name的内容 puts(address); puts(job); }
示例2 统计字符串中空格的数量
void calcSpace(){ char str[30]; int i=0,count=0; printf("请输入一行字符串:\n"); gets(str);//获取用户输入的字符串 while(str[i]!=‘\0‘){// ‘\0‘代表字符串的结束 if(str[i]==‘ ‘){ count++; } i++; } printf("您输入的字符串中包含%d个空格\n",count); }
字符串处理函数
与字符串有关的内置函数在头文件string.h中定义
要使用标准库字符串处理函数,程序前应该包含: #include <string.h>
下面是一些常用的字符串函数.
strlen(s):统计字符串的长度
strcpy(dest,src): 使用strcpy(dest,src)实现将src的字符串(源字符串)复制到dest(目标字符串);
示例:
void testString(){ char str[]="hello,zzsxt!"; char str2[15]; //使用strlen(s)统计字符串的长度 int len = strlen(str); printf("%s的长度为%d\n",str,len); //使用strcpy(dest,src)实现将src的字符串(源字符串)复制到dest(目标字符串) strcpy(str2,str); printf("复制str到str2中,str2=%s\n",str2); }
strcmp(str1,str2): 比较字符串str1和str2的大小(str1==str2返回值为0,str1>str2:返回正数 str1<str2:负数),不忽略大小写
strcmpi(str1,str2): 忽略大小写比较字符串str1和str2的大小(str1==str2返回值为0,str1>str2:返回正数 str1<str2:负数)
示例:
//简单用户登陆 void testLogin(){ char userName[20],password[20],code[6]; printf("请输入用户名:\n"); gets(userName);//将用户输入的用户名赋值给userName printf("请输入密码\n"); gets(password); printf("请输入验证码\n"); gets(code); //判断验证码是否正确:ZZSXT // strcmpi(str1,str2):忽略大小写进行比较 if(strcmpi(code,"ZZSXT")==0){ //判断用户名为zhangsan,密码为123456时登陆成功, if((strcmp(userName,"zhangsan")==0)&&(strcmp(password,"123456"))==0){ printf("登陆成功!\n"); }else{ printf("用户名或密码有误!\n"); } }else{ printf("验证码有误!请重新输入\n"); } }
strcat(dest, src):把字符串 src中的字符串连接到字符串 dest中字符串的后面
示例:
void testStrcat(){//字符串的拼接 char dest[]="zzsxt,"; char src[]="is very good!"; printf("连接前:\n"); printf("dest=%s\n",dest); printf("src=%s\n",src); strcat(dest,src);// 把字符串 src中的字符串连接到字符串 dest中字符串的后面 printf("连接后:\n"); printf("dest=%s\n",dest); printf("src=%s\n",src);}
字符指针: 在C语言中,可以将字符指针指向字符串,被指向的字符串可以是一个常量字符串,也可以是一个存储着字符串的字符数组
示例:
void testStrPointer(){ char *p="wahaha,wahaha!"; int count=0; while(*p!=‘\0‘){ if(*p==‘a‘){ count++; } p++; } printf("该字符串中a出现的次数共%d次\n",count); }
View testStrPointer()
字符指针数组:一个数组中的各个元素都是字符指针
示例:
void testStrPointerArr() { //声明一个字符指针数组:包含的都是字符指针 /* char *str1="zhangsan"; char *str2="lisi"; char *str3="wangwu"; char *names[]={*str1,*str2,*str3....}; */ char *names[]={"zhangsan","lisi","wangwu","zhaoliu","tianqi","xinba"}; char *temp;//中间变量:字符指针变量 printf("交换前:names[2]=%s,names[3]=%s\n",names[2],names[3]); temp=names[2]; names[2]=names[3]; names[3]=temp; printf("交换前:names[2]=%s,names[3]=%s\n",names[2],names[3]); }
示例:用户定义版字符串拷贝函数
1 void mystrcpy(char dest[ ], char src[ ]) 2 { 3 int i = 0; 4 while(src[i] != ‘\0‘) 5 { 6 dest[i] = src[i]; 7 i++; 8 } 9 dest[i] = ‘\0‘; 10 }
示例2: 用户定义版求字符串长度函数
1 int mystrlen (char *s) 2 { 3 int n = 0; 4 while (*s != ‘\0‘) 5 { 6 ++s; 7 ++n; 8 } 9 return n; 10 }
OK以上就是字符串部分的内容了,C语言的学习已经快要结束了,并不是不再坚持了,而是因为一开始学C的目的只是为了后面学JAVA打基础而已,而现在的学习深度据老师说已经足以支撑Java基础的部分了,所以C语言剩下的不多了,但是C语言确实挺有趣的,以后有机会我还是要好好学习一下的..