C语言学习(十五) 字符串函数

在字符串的计算部分,C语言函数库里面有很多处理字符串的函数,下面我们就介绍一些关于字符串处理函数的用法。具体包含字符串的输入输出getchar与putchar,还有string.h中的strlen、strcmp、strcpy、strcat、strchr、strstr等函数。

1. getchar与putchar函数

putchar函数
int putchar(int c);
向标准输出写一个字符,返回写了几个字符,可以返回EOF(-1)表示写失败。

getchar函数
int getchar(void)
返回类型是int是为了返回EOF(-1)。

Windows结束ctrl+z
Unix结束用 ctrl+D

例1:输入输出

int main(int argc,char const *argv[])
{
	int ch;
	while((ch=getchar())!=EOF)    //将getchar的内容赋值给ch,判断是否为EOF
	{
		putchar(ch);       //如果不是EOF,则输出这个字符串
	}
	printf("EOF\n");       //如果输人结束,输出EOF
	return 0;
}

运行结果:
输入字符串 在这里插入图片描述 输入ctrl+z 在这里插入图片描述

2. strlen函数
size_t strlen(const char *s);
返回s的字符串长度(不包括结尾的0),这里使用了const,表示不修改字符串的长度。

例2:字符串长度

#include<stdio.h>
#include<string.h>

int main(int argc,char const *argv[])
{
	char line[]="hello";
	printf("strlen=%lu\n",strlen(line));
	printf("sizeof=%lu\n",sizeof(line));
	return 0;
}

运行结果:
在这里插入图片描述
由于字符串hello是五个字符,所以显示的结果是5,而sizeof是表示数组需要占据6个字符,因为字符串结尾还有一个\0。

还有一种方式是遍历计数,当遍历到\0结束计数,就能得到字符串长度。

int mylen(const char *s)
{
	int idx=0;
	while(s[idx]!='\0')
	{
		idx++;
	}
    return idx;
}

3. strcmp函数
int strcmp(const char *s1,const char *s2);
比较两个字符串,比较的是字符在ASCII码表中的位置,返回:
0:表示s1==s2
1:表示s1>s2
-1:表示s1<s2

例3:字符串比较

#include<stdio.h>
#include<string.h>

int main(int argc,char const *argv[])
{
	char s1[]="abc";
	char s2[]="Abc";
	printf("%d\n",strcmp(s1,s2));
	
	if(strcmp(s1,s2)==0)
		printf("s1==s2");
	else if(strcmp(s1,s2)==1)
		printf("s1>s2");
	else if(strcmp(s1,s2)==1)
		printf("s1<s2");
	return 0;
}

我们也可以用遍历数组的方式进行字符串的比较:

int mycmp(int argc,char const *argv[])
{
	int idx=0;
	while(s1[idx]==s2[idx]&&s1[idx]!='\0')
	{
		idx++;
	}
     return s1[idx]-s2[idx];
}

除了数组,还可以用指针:

while(*s1==*s2&&*s1!='\0')
	{
		s1++;
		s2++;
	}
return *s1-*s2;

4. strcpy函数
chat *strcpy(char *restrict dst,const char *restrict src);
表示把src的字符串复制到dst,restrict表示src与dst在内存中不重叠,返回dst。

在我们复制一个字符串的时候需要使用malloc来申请一个动态内存,大小为

strlen(src)+1.
char *dst=(chat*)malloc(strlen(src)+1);
strcpy(dst,strc);

例4:字符串复制

int main(int argc,char const *argv[])
{
	char s1[]="abc";
	char s2[]="Abc";
	strcpy(s1,s2);

	return 0;
}

也可以使用数组遍历来完成字符串复制:

char* mycpy(char *dst,char const *src)
{
	int idx=0;
	while(src[idx]!='\0')
	{
		dst[idx]=src[idx];
		idx++;
	}
     dst[idx]=’\0’;
	return dst;
}

5. strcat函数
char *strcat(char *restrict s1,const char *restrict s2);
将s2拷贝到s1的后面,接成一个长的字符串,返回s1,需要s1有足够的空间。

这里需要注意的是,对于strcpy与strcat都存在安全问题,需要字符串数组内存足够大才行。

6. 字符串搜索函数
① 字符串中找字符
char *strchr(const char *s,int c);
表示从左边开始找字符,返回指针。
char *strrchr(const char *s,int c);
表示从右边开始找字符,返回指针。
返回NULL表示没有找到。

例5:寻找第二个字符

#include<stdio.h>
#include<string.h>

int main(int argc,char const *argv[])
{
	char s[]="hello";
	char *p=strchr(s,'l');    //找到第一个l所在的位置,返回指针
	p = strchr(p+1,'l');     //在p+1的指针后寻找l,也就是第二个l的位置
	printf("%s\n",p);     //输出的是第二个l所在位置指针后面的内容

	return 0;
}

② 字符串中寻找字符串
char *strstr(const char *s1,const char *s2);
字符串中进行字符串查询。
char *strcasestr(const char *s1,const char *s2);
忽略大小写进行字符串查询。

猜你喜欢

转载自blog.csdn.net/qq_33523925/article/details/87480708