7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

字符串操作常用函数

字符串的常用操作函数

puts()				//输出字符串
gets()				//获取字符串
strlen()			//计算字符串长度
memset()			//初始化
strcpy() strncpy()	//字符串的拷贝
strcat()			//字符串的拼接
strcmp()			//字符串的比较
strchr() strstr()	//字符串的查找
strtok()			//字符串分割
strlwr() strupr()	//字符串转为小写和字符串转为大写

puts()

puts()函数用来向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将’\0’转换为回车换行。其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。

函数原型:

int puts(const char *string);

示例:

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

int main()
{
	char *a="hello,word!";
	
	puts(a);
	
	return 0;
} 

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

printf、putchar和puts函数的区别

puts和printf("%s",s)的功能差不多,不同之处在于puts自带换行。

printf、putchar和puts函数均为输出函数。printf函数可输出各种不同类型的数据,putchar函数只能输出字符数据,而puts函数可输出字符串数据。

puts(s)的作用与语句printf("%s”,s)的作用基本相同,puts()函数只能输出字符串,不能输出数值或进行格式变换。puts()函数在输出字符串后会自动输出一个回车符。

例如:

printf("%c",‘A’) 与putchar(‘A’)都是输出一个字符A。
printf("%s\n",“abc”)与puts(“abc”)都是输出字符串abc并换行。

gets()

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

函数原型:

char * gets ( char * str );

当gets()函数和指针搭配使用要注意:

  1. 野指针,会造成非法内存访问,出现段错误,cmd窗口闪退。

  2. 一定要申请空间,常用malloc函数申请空间和memset函数初始化,但要注意内存泄漏的问题,malloc申请空间可能会失败,要返回值做判断。

示例:

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

int main()
{
	char *b=NULL;
	
	printf("请输入字符串:\n");
	
	b=(char *)malloc(128);
	
	if(b==NULL)
	{
		printf("内存申请失败\n");
		exit(-1);
	}
	
	memset(b,'\0',128);
	
	gets(b);
	puts(b);
	
	return 0;
} 

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strlen()

详情请看我之前写的博文:

6.字符数组 & 字符串 & sizeof和strlen的区别

memset()

作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。这个函数通常为新申请的内存做初始化工作。

函数原型:

#include <string.h>

void *memset(void *s, int ch, size_t n);

示例:

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

int main()
{
	char *b=NULL;
	
	printf("请输入字符串:\n");
	
	b=(char *)malloc(128);
	
	if(b==NULL)
	{
		printf("内存申请失败\n");
		exit(-1);
	}
	
	memset(b,'\0',128);  //初始化为‘\0’
	
	gets(b);
	puts(b);
	
	return 0;
} 

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strcpy() 和 strncpy()

strcpy()

功能:

C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

函数原型:

char *strcpy(char* dest, const char *src);

参数:dest为目标字符串,src为原字符串。

返回值:目标串的地址。

代码示例:

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

int main()
{
	char c[]={'\0'};
	char *d="nice work";
	
	strcpy(c,d);
	
	printf("strcpy:%s\n",c);
	
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strncpy()

功能:

C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

函数原型:

char *strncpy(char *destinin, char *source, int maxlen);

参数:

  1. destinin:表示复制的目标字符数组。

  2. source:表示复制的源字符数组。

  3. maxlen:表示复制的字符串长度。

返回值:目标串的地址。

代码示例:

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

int main()
{
	char pstr1[128] = "good job!";
    char *pstr2 = "nice work!";
    
    strncpy(pstr1,pstr2,4);
    printf("strncpy = %s\n",pstr1); //将pstr2的前三个字符拷贝到pstr1前三个位置
	
	return 0;
}

当拷贝目标为指针时:

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

int main()
{
	char *pstr1 = NULL;
    char *pstr2 = "nice work!";
    
    pstr1=(char *)malloc(128);
    if(pstr1==NULL)
    {
    	printf("内存申请失败\n");
		exit(-1);
	}
    memset(pstr1,'\0',10);
    
    strncpy(pstr1,pstr2,4);
    printf("strncpy = %s\n",pstr1);
	
	return 0;
}

运行结果:

将pstr2的前三个字符拷贝到pstr1前三个位置。

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

当拷贝目标为指针时:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strcat()

把src所指向的字符串(包括 ‘\0’ )复制到dest所指向的字符串后面(删除dest原来末尾的 ‘\0’ )。要保证dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。

函数原型:

extern char *strcat(char *dest, const char *src);

示例代码:

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

int main()
{
	char a[128]="China ";
	char *b="good job!";
	
	strcat(a,b);
	
	printf("strcat : %s\n",a);
	
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strcmp()

strcmp函数,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2)。若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

函数原型:

extern int strcmp(const char *s1,const char *s2);

代码示例:

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

int main()
{
	char a[128]="China ";
	char *b="good job!";
	
	int ret=strcmp(a,b);
	
	printf("strcmp返回值:%d\n",ret);
	
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strchr() 和 strstr()

strchr()

作用:strchr函数功能为在一个串中查找给定字符的第一个匹配之处。

函数原型:

char *strchr(const char *str, char c)

参数:

str:要被检索的 C 字符串。

c:在 str 中要搜索的字符。

返回值:

返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。

代码示例:

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

int main()
{
	char a[128]="We are the champion!";
	char b='a';
	char *c=NULL;
	
	c=strchr(a,b);
	
	if(c!=NULL)
	{
		printf("%s\n",c);
		//puts(strchr(a,b));
	}
	else
	{
		printf("没有找到该字符\n"); 
	}
		
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strstr()

作用:

返回字符串中首次出现子串的地址。

函数原型:

extern char *strstr(char *str1, const char *str2);

参数:

str1: 被查找目标。

str2: 要查找对象。

返回值:

若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。

strchr() 和 strstr() 的区别在于:

strchar() 是在 str 中搜索的字符。

strstr() 是在 str 中搜索字符串。

代码示例:

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

int main()
{
	char a[128]="We are the champion!";
	char *b="the";
	char *c=NULL;
	
	c=strstr(a,b);
	
	if(c!=NULL)
	{
		printf("%s\n",c);
		//puts(strchr(a,b));
	}
	else
	{
		printf("没有找到该字符\n"); 
	}
		
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strlwr() 和 strupr()

strlwr()

功能:将字符串中的S参数转换为小写形式。

函数原型:

extern char *strlwr(char *s);

返回值:返回指向s参数的指针。

代码示例:

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

int main()
{
	char a[128]="Hello Word!";
	
	puts(strlwr(a));
			
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strupr()

功能:将字符串s转换为大写形式。

函数原型:

extern char *strupr(char *s);

返回值:返回指向s参数的指针。

代码示例:

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

int main()
{
	char a[128]="Hello Word!";
	
	puts(strupr(a));
			
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

strtok()

功能:分解字符串为一组字符串。

函数原型:

char *strtok(char *str, const char *delim);

参数:

str:要被分解成一组小字符串的字符串。

delim:包含分隔符的 C 字符串。

返回值:

该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

注意:从第2次开始目标字符串要改为NULL

代码示例:

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

int main()
{
	char a[128]="Yinyuer,is,a,pretty,girl,!";
	char *b=",";
	char *c=NULL;
	int i=1;
	
	c=strtok(a,b);
	if(c!=NULL)
	{
		printf("第1个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	//从第二次开始目标字符串要改为NULL
	if(c!=NULL)
	{
		printf("第2个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	if(c!=NULL)
	{
		printf("第3个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	if(c!=NULL)
	{
		printf("第4个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	if(c!=NULL)
	{
		printf("第5个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	if(c!=NULL)
	{
		printf("第6个字符串为 %s\n",c);
	}
	
	c=strtok(NULL,b);
	if(c!=NULL)
	{
		printf("第7个字符串为 %s\n",c);
	}
	else
	{
		printf("分割完毕\n");
	}
				
	return 0;
}

上面的代码显得有点啰嗦,我们来优化一下代码:

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

int main()
{
	char a[128]="Yinyuer,is,a,pretty,girl,!";
	char *b=",";
	char *c=NULL;
	int i=1;
	
	c=strtok(a,b);
	printf("第%d个字符串为 %s\n",i,c);
	
	while(1)
	{
		c=strtok(NULL,b);
		if(c!=NULL)
		{
			printf("第%d个字符串为 %s\n",++i,c);
		}
		else
		{
			printf("分割完毕\n");
			break;
		}
	}
				
	return 0;
}

运行结果:

7.字符串操作常用函数:puts gets strlen memset strcpy strncpy strcat strcmp strchr strstr strtok strlwr strupr

Salute to 老陈!

上一篇:简单的banner轮播图


下一篇:banner区域图片背景注意点(移动端)