#includestdio.h
創(chuàng)新互聯(lián)是一家專業(yè)提供百色企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為百色眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
void s_trcat(char *s1,char *s2);//連接兩個(gè)字符串
void s_trcpy(char *s1,char *s2);//字符串s2復(fù)制給字符串s1
int s_trcmp(char *s1,char *s2);//兩個(gè)字符串比較大小
int s_trlen(char *s);//計(jì)算一個(gè)字符串的長(zhǎng)度
int main()
{
char s1[11]="12345", s2[11]="ABCDE";
char x1[11]="12345",x2[11]="SSSKK";
char str1[11]="ABCD",str2[11]="ACB";
char s[11]="ABCDEF";
int n,len;
s_trcat(s1,s2);//拼接s1,s2
printf("拼接s1,s2,輸出s1\n");
puts(s1);
s_trcpy(x1,x2);//將x2的內(nèi)容復(fù)制給x1
printf("將x2的內(nèi)容復(fù)制給x1,輸出x1\n");
puts(x1);
n=s_trcmp(str1,str2);//比較str1與str2大小,返回一個(gè)整數(shù),代表比較的結(jié)果
if(n==0)
printf("str1與str2相同\n");
if(n==1)
printf("str1大于str2\n");
if(n==-1)
printf("str1小于str2\n");
len=s_trlen(s);//計(jì)算字符串s的長(zhǎng)度,并返回一個(gè)整數(shù)(字符串長(zhǎng)度),
printf("字符串s的長(zhǎng)度:%d\n",len);
}
void s_trcat(char *s1,char *s2)//連接兩個(gè)字符串
{
char *p=s1;
char *q=s2;
while(*p)
p++;
while(*q)
{
*p=*q;
p++;
q++;
}
*p='\0';//給新字符串尾部加個(gè)結(jié)束符
}
void s_trcpy(char *s1,char *s2)//字符串s2復(fù)制給字符串s1
{
char *p=s1;
char *q=s2;
while(*p++=*q++);
*p='\0';//給新字符串尾部加個(gè)結(jié)束符
}
int s_trcmp(char *s1,char *s2)//兩個(gè)字符串比較大小
{
char *p=s1;
char *q=s2;
int len1=0,len2=0;
while(*p++)
len1++;
while(*q++)
len2++;
p=s1,q=s2;
while(*p!='\0'*q!='\0')
{
if(*p*q)
return 1;
if(*p*q)
return -1;
p++;
q++;
}
if(len1==len2)
return 0;//返回0,兩個(gè)字符串相同
if(len1len2)
return 1;//返回1,前大于后
if(len1len2)
return -1;//返回-1,前小于后
}
int s_trlen(char *s)//計(jì)算一個(gè)字符串的長(zhǎng)度
{
char *p=s;
int len=0;
while(*p++)
len++;
return len;//返回字符串長(zhǎng)度
}
strcat(p1+2,p2+1)
p1+2,也就是p1向后移動(dòng)兩個(gè)字符位置的指針作為一個(gè)字符串的起始指針,即字符串為"cd"
p2+1,也就是p2向后移動(dòng)一個(gè)字符位置的指針作為一個(gè)字符串的起始指針,即字符串為"BCD"
該函數(shù)調(diào)用將p1+2作為目的串,p2+1作為源串,將后者連接到前者的后面,則連接后為"cdBCD"。
strcpy(str+2, .....)
該函數(shù)調(diào)用將 后面的串"cdBCD"復(fù)制到前者str+2,即"z"的位置,這是一種覆蓋復(fù)制。則'z'被'c'覆蓋(原來(lái)前面的"xy"保留了下來(lái)),后面接著放了"cBCD";
最后輸出的是str,也就是從str的最開(kāi)始輸出,故結(jié)果為"xycdBCD"
對(duì)于strcat,其格式為
char *strcat(char *a, char *b);
其功能為,將字符串b拼接到a的尾部,并將結(jié)果字符串返回。
所以,實(shí)現(xiàn)該函數(shù)的思路為:
1 找到字符串a(chǎn)的結(jié)尾;
2 將b的所有字符復(fù)制到a尾部的空間中,到\0為止。
需要注意的是,復(fù)制的結(jié)果要包含b的結(jié)束符。
代碼如下:
char?*strcat(char?*a,?char?*b)
{
char?*p?=?a;
while(*p)?p?++;
//當(dāng)*p為\0時(shí)退出,即查找到a的結(jié)尾。
do
{
*p++?=?*b;//將b中的每個(gè)字符復(fù)制到p中。
if(*b?==?'\0')break;//遇到結(jié)束符退出。
b++;//移動(dòng)指針b的位置。
}while(1);
return?a;//返回結(jié)果字符串首地址。
}
C語(yǔ)言中拼接字符串可以使用strcat函數(shù)。
1、strcat()函數(shù) ,即string catenate的縮寫
原型:extern char *strcat(char *dest,char *src);
用法:#include string.h
功能:把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的'\0')并添加'\0'。
說(shuō)明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。
返回指向dest的指針。
2、舉例:
#include?stdio.h
#include?string.h
int?main(){
char?d[20]="字符串1";?//第一個(gè)字符串
char?*s="?字符串2";??//第二個(gè)字符串
strcat(d,s);????//拼接兩個(gè)字符串,結(jié)果保存在第一個(gè)字符串當(dāng)中
printf("%s",d);?//輸出拼接結(jié)果:"字符串1字符串2"
getchar();
return?0;
}
數(shù)組里面貌似沒(méi)有,只有字符串拼接,不過(guò)這中簡(jiǎn)單的變換你完全可以自己寫個(gè)函數(shù)嘛
不是說(shuō)一定不行,也有可能可以。像你這種定義就有可能可以,因?yàn)槿绻鹲1,s2 在分配內(nèi)存時(shí)就是連續(xù)的,那么就是越界了,你這條打印出來(lái)也會(huì)對(duì),因?yàn)樗麤](méi)有越界到別的地方,都是字符串空間,你要同時(shí)把s2也打印出來(lái),看看s2有沒(méi)有被改變。c并不檢測(cè)越界,只有在動(dòng)行時(shí)有可能會(huì)出現(xiàn)執(zhí)行錯(cuò)誤。
標(biāo)題名稱:c語(yǔ)言比拼接函數(shù) c語(yǔ)言數(shù)組拼接函數(shù)
分享路徑:http://aaarwkj.com/article14/doodjde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)站策劃、微信小程序、網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)