云计算百科
云计算领域专业知识百科平台

C语言字符串操作

目录

一维字符数组

字符串常用相关函数

获得字符串长度(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、排序

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言字符串操作
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!