C语言之字符串
什么是字符串:使用双引号包含的字符序列。
- 简单的字符串”hello world”
- 一个‘h’是一个字符
- 很多个字符组合在一起就是字符串了
字符串与字符数组
- 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串
- 字符数组和字符串的区别是:字符串的末尾有一个空字符 ‘\0’
- char name[15]={ 'W', 'a', 'n', 'g', 'L', 'i', '\0'};
- char name[15] = "WangLi";
- char password[] = "012345678";
- 字符串的输出”%s”,’\0’是不会输出的
字符串的初始化
字符串I/0函数
char name[10];
gets(name);
puts(name);
示例:
|
void test1(){ /* 字符串常量:双引号中间包含的字符序列。 "hello world" "zhangsan" "hello \"zzsxt\""===>\:转义符 scanf():获取用户输入 %d:(int)整数, %c:(char)字符型, %f:(float)单精度浮点型 %lf:双精度浮点型(double) %s:字符串 注意:scanf在使用的过程中不能输入空格,如果输入的字符串中包含有空格,将只会获取空格前边的内容。 printf():输出到显示器 gets():获取用户输入的一行信息,可以包含空格。 puts():输出字符串到显示器。 */ char name[20]; printf("请输入姓名:\n"); //scanf("%s",name);//name数组名代表数组的首地址 //printf("%s\n",name); gets(name); puts(name); } |
示例2:
|
void test2(){ char name[20]; char dept[10]; printf("请输入员工的姓名:\n"); gets(name); printf("请输入部门名称:\n"); gets(dept); // printf("员工姓名:%s\n",name); // printf("所属部门:%s\n",dept); puts("员工姓名:"); puts(name); puts("\n"); puts("所属部门:"); puts(dept); puts("\n"); } |
示例3: 统计用户输入的字符串中空格个数
分析:
1.获取用户输入的字符串内容
scanf()不合适,字符串中存在空格。
gets()可以获取用户输入的字符串内容,包含空格
2.遍历字符串中字符,将每一个字符与空格进行比较,如果成功空格个数加1
字符串和数组的差别:字符串末尾结束会自动加入"\0"用于标示该字符串结束。
|
void test3(){ char str[30];//保存用户输入的字符串 int count=0;//统计空格个数 int i=0;//循环变量 printf("请输入您要统计的字符串:\n"); gets(str);//获取用户输入的字符串,并将其保存到str中 while(str[i]!='\0'){ if(str[i]==' '){ count++; } i++; } printf("该字符串中共有%d个空格!",count); } |
字符串处理函数
与字符串有关的内置函数在头文件string.h中定义
要使用标准库字符串处理函数,程序前应该包含:
#include <string.h>
strlen(s);计算字符串s中字符的个数,并将字符的个数作为函数的返回值。在计算字符个数时不计表示字符串结束的空字符'\0'。
示例:
|
void test4(){ char city[]="beijing"; char city2[]="shanghai"; int len1 = strlen(city);//统计city变量对应的字符串的长度 int len2 = strlen(city2);//统计city变量对应的字符串的长度 printf("字符串:%s的长度为%d\n",city,len1); printf("字符串:%s的长度为%d\n",city2,len2); } |
示例2: 校验用户名和密码的长度
1.用户名长度不能小于8位,并且只能有字母和数字组成
2.密码长度不能小于6位
|
void test5(){ char userName[20]; char password[20]; int userNameLen,passwordLen; int i=0; char c; int flag=1;//用户名是否合法,0代表不合法,1代表合法。 //获取用户名和密码 printf("请输入用户名:\n"); gets(userName); printf("请输入密码:\n"); gets(password); userNameLen=strlen(userName);//获取用户名的长度 passwordLen=strlen(password);//获取密码的长度 if(userNameLen>=8){ //遍历字符串中字符 while(userName[i]!='\0'){ c = userName[i]; //判断用户名是否有字母或数字组成 if(!((c>='a'&&c<='z')||(c>='0'&&c<='9')||(c>='A'&&c<='Z'))){ flag=0; break; } i++; } //判断用户名是否合法 if(flag==1){ printf("用户名合法!\n"); }else{ printf("用户名只能有字母或数字组成!\n"); } }else{ printf("用户名长度不能小于8位!\n"); } if(passwordLen>=6){ printf("密码合法!\n"); }else{ printf("密码长度不能小于6位!\n"); } } |
字符串复制:strcpy(dest,src);
描述:其中,dest是目标字符串,src是源字符串。相当于把字符数组src中的字符串拷贝到字符数组dest中。
结束标志'\0'也一同拷贝。src可以是一个字符串常量。字符数组dest应足够大,以保证字符串复制不越界
注意:当发生字符串的复制时(调用strcpy(dest,src)函数) 之后,目标字符中的原有字符将被覆盖。
示例:
|
void test6(){ char source[]="good good study!"; char dest[50]="day day up!"; strcpy(dest,source); printf("源字符串为:%s\n",source); printf("目标字符串为:%s\n",dest); } |
strcmp(str1, str2):按照ASCII码顺序比较字符串str1和str2的大小,比较的结果由函数返回。
在两个字符串str1和str2相同时返回0;字符串str1大于字符串str2时返回一个正值,字符串str1小于字符串str2时返回一个负值。
注意:区分大小写进行比较
示例1:实现用户登陆功能。
|
void test7(){ char userName[20]; char password[20]; printf("请输入用户名:\n"); gets(userName); printf("请输入密码:\n"); gets(password); //比较用户名和密码是否与已经保存的用户名和密码相同 if((strcmp(userName,"admin")==0)&&(strcmp(password,"123456")==0)){ printf("登陆成功!\n"); }else{ printf("用户名或密码有误!\n"); } } |
strcmpi(str1,str2) 按照ASCII码顺序比较字符串str1和str2的大小,比较的结果由函数返回。
在两个字符串str1和str2相同时返回0;字符串str1大于字符串str2时返回一个正值,字符串str1小于字符串str2时返回一个负值。
注意:忽略大小写进行比较
示例2:实现验证码比较的功能(要求验证码在比较的过程不区分大小写)。
|
void test8(){ char code[10];//用来保存用户输入的验证码 printf("请输入验证码:R4Sb\n"); gets(code);//获取用户输入的验证码 if(strcmpi(code,"r4sb")==0){//strcmp(str1,str2):忽略大小进行比较 printf("验证码正确!\n"); }else{ printf("验证码有误!\n"); } } |
strcat(dest, src):把字符串 src中的字符串连接到字符串 dest中字符串的后面。本函数返回值是字符数组dest的首地址。
连接后字符串的总长度将是字符串 src 的长度加上字符串 dest的长度。目标字符串dest的大小应足够存储最终的字符串。
示例:
|
void test9(){ char source[]="is very good!"; char dest[30]="zzsxt,"; strcat(dest,source); printf("源字符串为:%s\n",source); printf("连接后的目标字符串为:%s\n",dest); } |
字符指针: 在C语言中,可以将字符指针指向字符串,被指向的字符串可以是一个常量字符串,也可以是一个存储着字符串的字符数组
示例1: 统计字符串中字符a出现的次数
|
void test(){ char str[30]="wahaha yiyaya"; char *p=str;//将字符串的首地址赋值给指针变量,此时指针指向的是字符第一个字母。 int count=0;//统计字符a的数量 int i; for(;*p!='\0';p++){//*p获取指针p对应的字符 if(*p=='a'){ count++; } } printf("字符串%s中共有%d个字符a\n",str,count); } |
字符指针数组:一个数组中的各个元素都是字符指针
示例:
|
void test2(){ /* char *str1="zhangsan"; char *str2="lisi"; char *str3="wangwu"; char *names[]={*str1,*str2,*str3};//names字符指针数组 */ char *names[]={"zhangsan","lisi","wangwu","zhaoliu"}; char *temp; printf("交换前:names[1]=%s,names[3]=%s\n",names[1],names[3]); //交换names[1]和names[3]的值 temp = names[1]; names[1]=names[3]; names[3]=temp; printf("交换后:names[1]=%s,names[3]=%s\n",names[1],names[3]); } |
示例2: 模拟strcpy(dest,src)实现字符串复制.
|
void mystrcpy(char dest[],char src[]){ int i=0; while(src[i]!='\0'){ dest[i]=src[i]; i++; } dest[i]='\0'; } |
示例2: 模拟strlen(s)实现统计字符串的长度。
|
int mystrlen(char *p){ int count=0;//统计字符的长度 while(*p!='\0'){ count++; p++; } return count; } |
C语言之字符串的更多相关文章
- R语言拆分字符串
R语言拆分字符串 aaa<-"aa;bb;cc"ccc<-strsplit(aaa,split=";") bbb<- unlist(strsp ...
- C语言之字符串处理函数
C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...
- Swift3.0语言教程字符串与URL的数据转换与自由转换
Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...
- Swift3.0语言教程字符串与文件的数据转换
Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...
- Swift3.0语言教程字符串转换为数字值
Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...
- Swift3.0语言教程字符串大小写转化
Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ...
- C语言学习 —— 字符串的学习(一)
这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定 ...
- iOS开发-OC语言 (三)字符串
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...
- Go语言中字符串的查找方法小结
这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr strin ...
- [笔记]Go语言的字符串拼装方式性能对比
Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好? 下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较 ...
随机推荐
- ado.net知识整理
对ado.net总是半知半解,五大对象也总是混淆,近期自己做小项目练手,整理了一些知识点 ado.net的无要素(摘自其他博文) Connection 物件 Connection 对象主要是开启 ...
- iOS开发 - 啰嗦讲解 Runloop
写在前面的 为什么要了解 RunLoop?如果你想成为一个高级iOS开发工程师,那这是你必须了解的东西,他能帮助你更好的理解底层实现的原理,可以利用它的特性做出一些高效又神奇的功能.RunLoop这个 ...
- 【HDOJ 1085】数学问题,母函数
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- Entity Framework查询注意
首先我们看下where的方法,直接查看定义(定义如下),其实一种是对IEnumerable的扩展,一种是对IQueryable的扩展,直接看最常用的,其实区别就在IEnumerable的扩展的参数是系 ...
- 实现TOLock过程中的一处多线程bug
背景 最近在啃<多处理器编程的艺术>,书中的7.6节介绍了时限锁--实现了tryLock方法的队列锁. 书中重点讲解了tryLock的实现,也就是如何实现在等待超时后退出队列,放弃锁请求, ...
- 深入浅出学习HTTP协议
之前学习javaWeb只是大致了解了一下,今天重点介绍下http请求,当是复习吧! 一.http基础概念 1.什么是http协议? HTTP是Hyper Text Transfer Protocol( ...
- Oracle GoldenGate中HANDLECOLLISIONS参数使用详解
Oracle GoldenGate中HANDLECOLLISIONS参数使用详解 HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...
- 分针网——每日分享: jquery选择器的用法
jQuery选择器是jQuery库的一大特色,用这些选择器不但可以省去繁琐的JavaScript 书写方式,还可以节省时间和效率,正是有这些jQuery选择器,才让我们更容易的操作JavaScript ...
- Python基本语法--数据结构与运算符
# -*- coding: utf-8 -*- print "Hello, Python!"; print ("Hello, Python!"); #行和缩进 ...
- ReactiveCocoa学习总结(1)
1. 它是什么? 官方解释: [RACSignal] is a push-driven stream with a focus on asynchronous event delivery throu ...