c/c++语言开发共享C语言学习笔记之字符串间的那些事

字符串表示方式字符串常量用双引号括起来的内容称为字符串常量,例如:"hello, world!"为一个字符串常量。双引号中的字符和编译器自动加入末尾的字符,都作为字符串存储在内

字符串表示方式

字符串常量

C语言学习笔记之字符串间的那些事

用双引号括起来的内容称为字符串常量,例如:"hello, world!"为一个字符串常量。双引号中的字符和编译器自动加入末尾的字符,都作为字符串存储在内存中。

字符串常量属于静态存储类别。当在函数中使用字符串常量时,该字符串只会被存储一次,用双引号括起来的内容被视为指向该字符串存储位置的指针,如以下例程所示:

/* strptr.c -- 把字符串看做指针 */  #include <stdio.h>    int main(void) {        printf("%s, %p, %cn", "who", "you", *"are");        return 0;  }

程序输出结果如下:

who, 0x400668, a

#strlen

strlen函数在使用前需要添加一个头文件:#include<string.h>

函数声明:size_tstrlen(const char *s);

函数功能:获取字符串的长度,不包括‘’。

返回值:返回字符串中的字符个数(空格也算一个字符)

例:

#inclue<stdio.h>  #include<string.h>  int main()  {  	char str[]="hello world";  	int len=strlen(str);  	printf("%d",len);//len=11  }

#strcpy和strncpy

##strcpy

函数声明:char *strcpy(char *dest,const char *src);

函数说明:拷贝src指向的字符串到dest指针指向的内存中,‘’也会拷贝过去。

函数返回值:目的内存的地址。

※※注意:在使用此函数时,必须保证dest指向的内存空间足够大,否则会出现内存污染。

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char str[]="hello world";  	char s[]="hello earth";  	strcpy(str,s);  	printf("%s",str);//打印结果是hello earth  } 

##strcnpy

函数声明:char *strncpy(char *dest,const char *src,size_tn);

函数说明:将src指向的字符串前n个字节,拷贝到dest指向的内存中。

返回值:目的内存的首地址。

※※注意:1.strncpy不拷贝‘’

                 2.如果n大于src指向的字符串中的字符个数,则在dest后面填充n-strlen(src)个''

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char str[]="hello world";  	char s[]="hello earth";  	strncpy(str,s,8);  	printf("%s",str);  } 

C语言学习笔记之字符串间的那些事

#strcat和strncat

##strcat

函数声明:char *strcat(char *dest,const char *src);

函数功能:strcat函数追加src字符串到dest指向的字符串的后面,追加的时候会追加''。

※※注意:保证dest指向的内存空间足够大。

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char str[100]="hello world";  	char s[]="hello";  	strcat(str,s);  	printf("%s",str);  } 

C语言学习笔记之字符串间的那些事

 ##strncat

函数声明:char *strncat(char *dest,const char *src,size_tn);

追加src指向的字符串的前n个字符,到dest指向的字符串的后面。

※※注意:如果n大于src的字符个数,则只将src字符串追加到dest指向的字符串的后面,追加的时候会追加''

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char str[100]="hello world";  	char s[]="hello";  	strncat(str,s,4);  	printf("%s",str);  } 

C语言学习笔记之字符串间的那些事

#strcmp和strncmp

##strcmp

函数声明:int strcmp(const char *s1,const char *s2);

函数说明:比较s1和s2指向的字符串的大小。

比较的方法:逐个字符去比较ascii码,一旦比较出大小则返回。

返回值:

如果s1指向的字符串大于s2指向的字符串,返回1

如果s1指向的字符串小于s2指向的字符串,返回-1

如果相等的话返回0

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char str1[]="hello world";  	char str2[]="hello world";  	int ret;  	ret=strcmp(str1,str2);  	printf("%d",ret);//ret==0  } 

##strncmp

函数声明:int strncmp(const char *s1,const char *s2,size_t n);

函数说明:比较s1和s2指向的字符串中的前n个字符

例:

#include<stdio.h>  #include<string.h>   int main()  {  	char s1[]="hello world";  	char s2[]="hello earth";  	int ret;  	ret=strncmp(s1,s2,5);  	if(ret>0)  		printf("s1的前五个字符大于s2的前五个字符n");   	else if(ret<0)  		printf("s1的前五个字符小于s2的前五个字符n");   	else  		printf("s1的前五个字符等于s2的前五个字符n");   } 

关于字符串的知识点我暂时梳理了这么多,还有许多未涉及到的地方,希望大家给予意见,接下来让我们做一道比较有意思的题目。

#题目

输入n行身份证号,按照年龄排序(从大到小)并输出。

#include<stdio.h>  #include<string.h>     int main()  {  	char a[100][100],birth[100][100],s[100];  	int n,i,j;scanf("%d",&n);  	gets(s);  	for(i=0;i<n;i++)  	{  		gets(a[i]);  		strncpy(birth[i],a[i]+6,8);  	}  	for(i=0;i<n;i++)  	{  		for(j=i+1;j<n;j++)  		{  			if(strcmp(a[j],a[i])<0)  			{  				strcpy(s,a[j]);  				strcpy(a[j],a[i]);  				strcpy(a[i],s);  			}  		}  	}  	for(i=0;i<n;i++)  	{  		printf("%sn",a[i]);  	}   } 

总结

到此这篇关于c语言学习笔记之字符串间的那些事的文章就介绍到这了,更多相关c语言字符串内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C语言学习笔记之字符串间的那些事,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1081971.html

(0)
上一篇 2022年4月24日
下一篇 2022年4月24日

精彩推荐