目录
一维字符数组
字符串常用相关函数
获得字符串长度(strlen)
系统调用函数
不用系统函数
字符串复制操作(strcpy)
系统调用函数
不用函数的字符串复制
方法一
方法二
方法三
字符串的拼接函数(strcat)
系统调用函数
不用函数
字符串比较(strcmp)
系统函数
不用函数
二维字符数组
定义的语法
初始化
访问:读
访问:写
!重点!
第四章
一维字符数组
字符串常用相关函数
char str[10]="hello";
printf("%s\\n",str);
scanf("%s",str); //这里不用加取地址& ,输入zhangsan输出zhangsan,但是,输入zhang san只能输出zhang,因为scanf()把空格、tab、回车看为结束标志。
gets(); //gets在接收字符串的时候可以接受 空格,遇到\\n,表示输入结果
-
获得字符串长度(strlen)
(string length)求得有效字符串的长度
char str[50]="hello"; //字符串长度为5,从第一个字符开始计数,到字符串的\\0(结束标志)以前的长度为字符串长度。
注意区别:sizeof(str)是内存占多大,sizeof(基类型)*元素个数 : 1*50 = 50 byte
比如说:“hello”这个字符串占的内存大小(sizeof)是6,因为后面还有一个'\\0',它的有效字符串长度(strlen)是5
系统调用函数
strlen(str)
不用系统函数
#include <stdio.h>
#include <string.h>
int main()
{
char str[50]="hello";
printf("input 49 char:");
scanf("%s",str);
int len =0;
int i=0;
while(1)
{
if('\\0' !=str[i])
{
len++;
}
else
{
break;
}
i++;
}
printf("sizeof() is %lu\\n",sizeof(str)); //这个获得的大小是 数组占用的内存大小
printf("strlen %d\\n",len); //这个获得的是字符串有效长度
return 0;
}
-
字符串复制操作(strcpy)
整体复制一个已有内容的字符串(源串),到另外一个字符串(目标串)。源字符串的内容和目标字符串的内容相同。
strcpy(mubiao_str,yuan_str);
系统调用函数
#include <stdio.h>
#include <string.h>
int main()
{
char yuan_str[100]="hello";
char mubiao_str[100]={0};
strcpy(mubiao_str,yuan_str);
printf("yuan_str:%s\\n",yuan_str);
printf("mubiao_str:%s\\n",mubiao_str);
return 0;
}
不用函数的字符串复制
从源字符串中取一个字符,向目标字符串写入一个字符,依次执行这个动作。当字符为\\0时,结束循环。在目标字符串的最后,加入结束标志是\\0。
方法一
int len =strlen(yuan_str);
for(i=0;i<len;i++)
{
mubiao_str[i]=yuan_str[i];
}
mubiao_str[i]='\\0';
方法二
while('\\0' !=yuan_str[i])
{
mubiao_str[i] =yuan_str[i];
i++;
}
mubiao_str[i]='\\0';
方法三
while(mubiao_str[i] = yuan_str[i])
{
i++;
}
-
字符串的拼接函数(strcat)
string concat
strcat(str2,str1)把str2拼接到str1
在字符串拼接过程中,str1需要有足够大的内存空间,否则程序会出现段错误、str1、str3内存空间会被意外修改。
系统调用函数
strcat(被拼接,拼接);
#include <stdio.h>
#include <string.h>
int main()
{
char str1[100]="hello";
char str2[10]="world";
strcat(str1,str2);
printf("%s\\n",str1);
return 0;
}
不用函数
- 先要找到str1字符串‘\\0’的位置,用i标记
- 从str2中依次取出每个字符,存入str[i]的位置。str[i++] = str[j++]
while('\\0'!=str1[i])
{
i++;
}
while(str1[i]=str2[j])
{
i++;
j++;
}
字符串比较(strcmp)
比较两个字符串的内容(string compare)
int strcmp(const char *s1,const char *s2);
参数
- s1,需要被比较的字符串1;
- s2,需要被比较的字符串2.
返回值
- ==0 s1与s2 内容相同
- >0 内容不一样,不一样处对应的字符s1[i] – s2[i] >0
- <0 内容不一样,不一样处对应的字符s1[i] – s2[i] <0
系统函数
核心代码
if(0==strcmp(str1,str2))
完整代码
#include <stdio.h>
#include <string.h>
int main()
{
char str1[10]="hallo";
char str2[10]="hello";
/* 错误的方法
if(str1==str2)
*/
//if(0==strcmp(str1,str2))
int ret=strcmp(str1,str2);
if(0==ret)
{
printf("same\\n");
}
else
{
printf("not same\\n");
}
return 0;
}
不用函数
核心代码
- 使用1个下标,如果str1[i]和str2[i]相同就继续比较下一个;
- 如果不同,str1[i]-str2[i]就是比较的结果。
while(str1[i]==str2[i] && str1[i]!='\\0')
{
i++;
}
ret=str1[i]-str2[i];
完整代码
#include <stdio.h>
#include <string.h>
int main()
{
char str1[10]="hallo";
char str2[10]="hello";
int i=0;
int ret=0;
while(str1[i]==str2[i] && str1[i]!='\\0')
{
i++;
}
ret=str1[i]-str2[i];
if(0==ret)
{
printf("same\\n");
}
else
{
printf("not same\\n");
}
printf("ret %d\\n",ret);
return 0;
}
二维字符数组
二维字符数组是由多个一维字符数组组成;可以存储多个字符串的数组。
定义的语法
char a[3][50];
char 数组的名字 【行数】 【列数】 行、列必须为整型常量

初始化
//初始化
char strs[3][50]={"how","are","you"};
char strs1[3][50]={{"how"},{"are"},{"you"}};
char strs2[3][50]={0}; //常用,剩余的全部补0
char strs3[3][50]={{0}};
char strs4[][50]={"hello","are","you"};//空的位置只会为3
访问:读
//访问,读
printf("%s\\n",strs[0]); //%s–>char[]
printf("%d\\n",strs[0][0]); //%s–>char[]
int i=0;
int hang=sizeof(strs)/sizeof(strs[0]); // 150/50
for(i=0;i<hang;i++)
{
printf("strs[i]:%s\\n",strs[i]);
}
访问:写
//访问,写
strcpy(strs[0],"aaa");
strcat(strs[2],"!!!");
printf("修改后:");
for(i=0;i<hang;i++)
{
printf("strs[i]:%s\\n",strs[i]);
}
!重点!
第四章
系统提供的相关操作函数
熟练调用C库字符(strlen、strcat、strcmp、strcpy)串相关函数
手撕代码:strlen、strcpy、strcmp、strcat、排序
网硕互联帮助中心




评论前必须登录!
注册