什么是字符串:使用双引号包含的字符序列。

  • 简单的字符串”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语言之字符串的更多相关文章

  1. R语言拆分字符串

    R语言拆分字符串 aaa<-"aa;bb;cc"ccc<-strsplit(aaa,split=";") bbb<- unlist(strsp ...

  2. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  3. Swift3.0语言教程字符串与URL的数据转换与自由转换

    Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...

  4. Swift3.0语言教程字符串与文件的数据转换

    Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...

  5. Swift3.0语言教程字符串转换为数字值

    Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...

  6. Swift3.0语言教程字符串大小写转化

    Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ...

  7. C语言学习 —— 字符串的学习(一)

    这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定 ...

  8. iOS开发-OC语言 (三)字符串

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 24.0px "PingFang SC" } p ...

  9. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下   1.func Contains(s, substr strin ...

  10. [笔记]Go语言的字符串拼装方式性能对比

    Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好? 下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较 ...

随机推荐

  1. 表格组件神器:bootstrap table详细使用指南

    1.bootstrap-table简介 1.1.bootstrap table简介及特征: Bootstrap table是国人开发的一款基于 Bootstrap 的 jQuery 表格插件,通过简单 ...

  2. 2.Ubuntu16.04安装QT5.8.0

    VSCode编辑器开发CPP:http://www.cnblogs.com/dotnetcrazy/p/6661921.html 下载QT run文件(安装包),一般都是这两个下载的比较多,我这边使用 ...

  3. sizeof 与 strlen

    一.sizeof     sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由 ...

  4. Java ssh 框架 hibernate 详细理解

    Hibernate框架技术相信对大多数的 java 程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,需要我们认真的分析数据表中数据项之间的交互: 数据库表的之间的关系有: (1)一对 ...

  5. Virtualbox mac版centos7.2 安装共享文件夹

    因为用的是mac本,在自己电脑上用virtualbox安装了centos7.2 虚拟机,为了实现与本机交换文件,需要用到贡享文件夹功能. 网上搜的时候多是windows版的,所以自己写一个mac版的. ...

  6. Angularjs快速入门(二)

    说说上一节的例子,$scope 我们没有创建这个对象,直接绑定就能获取里面的对象,这种风格遵循了一种叫迪米特法则的设计模式. 然后angular还有一种很强大的功能叫“指令”. 就是你可以吧模板编写成 ...

  7. css3 felx布局

    一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. [css] .box ...

  8. mac终端ssh连接服务器 空闲的时候 连接断开

    ssh_config详解(MAC OSX) 方法1:MAC客户端配置 配置“/etc/ssh/ssh_config”文件 “/etc/ssh/ssh_config” 文件是OpenSSH系统范围的配置 ...

  9. Java多线程的几个常用关键字

    一.同步(synchronized)和异步(asynchronized) 1.同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没必要进行同步.设置共享资源为同步的话, ...

  10. <CentOS7>如何设置hostname

    在CentOS/RHEL 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置: ceph@client-node ~]$ hostnamectlstatus Stat ...