您的位置:首頁 > 手機教程 > 安卓教程 > C語言學習筆記之字符串間的那些事

C語言學習筆記之字符串間的那些事

2022-04-17 18:47:36 來源:易采站長站 作者:

C語言學習筆記之字符串間的那些事

目錄
字符串表示方式#strlen#strcpy和strncpy##strcpy##strcnpy#strcat和strncat##strcat ##strncat#strcmp和strncmp##strcmp##strncmp#題目總結

字符串表示方式

字符串常量

用雙引號括起來的內容稱為字符串常量,例如:"Hello, World!"為一個字符串常量。雙引號中的字符和編譯器自動加入末尾的\0字符,都作為字符串存儲在內存中。

字符串常量屬于靜態存儲類別。當在函數中使用字符串常量時,該字符串只會被存儲一次,用雙引號括起來的內容被視為指向該字符串存儲位置的指針,如以下例程所示:

/* strptr.c -- 把字符串看做指針 */
#include <stdio.h>

int main(void) {

? ? printf("%s, %p, %c\n", "Who", "you", *"are");

? ? return 0;
}

程序輸出結果如下:

Who, 0x400668, a

#strlen

strlen函數在使用前需要添加一個頭文件:#include<string.h>

函數聲明:size_tstrlen(const char *s);

函數功能:獲取字符串的長度,不包括‘\0’。

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

例:

#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指針指向的內存中,‘\0’也會拷貝過去。

函數返回值:目的內存的地址。

※※注意:在使用此函數時,必須保證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不拷貝‘\0’

                 2.如果n大于src指向的字符串中的字符個數,則在dest后面填充n-strlen(src)個'\0'

例:

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

#strcat和strncat

##strcat

函數聲明:char *strcat(char *dest,const char *src);

函數功能:strcat函數追加src字符串到dest指向的字符串的后面,追加的時候會追加'\0'。

※※注意:保證dest指向的內存空間足夠大。

例:

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

 ##strncat

函數聲明:char *strncat(char *dest,const char *src,size_tn);

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

※※注意:如果n大于src的字符個數,則只將src字符串追加到dest指向的字符串的后面,追加的時候會追加'\0'

例:

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

#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("%s\n",a[i]);
	}
 } 

總結

到此這篇關于C語言學習筆記之字符串間的那些事的文章就介紹到這了,更多相關C語言字符串內容請搜索易采站長站以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持易采站長站!

如有侵權,請聯系QQ:279390809 電話:15144810328

相關文章

色七七影院_香港三级台湾三级在线播放_男人放进女人阳道猛进猛出