我用一個(gè)實(shí)例來(lái)給你說(shuō)明一下吧。假如,傳進(jìn)去的參數(shù)
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括鶴峰網(wǎng)站建設(shè)、鶴峰網(wǎng)站制作、鶴峰網(wǎng)頁(yè)制作以及鶴峰網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鶴峰網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鶴峰省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
str="abaab"
substr="ab"
那么預(yù)期的結(jié)果函數(shù)應(yīng)該返回2。
下面我們來(lái)看一下具體的過(guò)程:
首先,定義一些變量,n是統(tǒng)計(jì)子串出現(xiàn)次數(shù)的,初始化為0;
p,r是指向char類型的指針;
然后開(kāi)始遍歷源字符串str,即while語(yǔ)句:
while(*str) 循環(huán)退出的條件是str指向了源串的末尾
進(jìn)入循環(huán)后,把源串和子串的指針?lè)謩e賦給p和r
接下來(lái)的一個(gè)while(*r) 就是遍歷子串substr,同樣循環(huán)退出的條件是r指向了子串的末尾
這個(gè)循環(huán)體只有一句話:
if(*r==*p){ r++;p++}
else break;
即如果子串的第一個(gè)字符和源串的一個(gè)字符相同,那么子串和源串兩個(gè)指針都向后移動(dòng)一個(gè),
然后繼續(xù)while(*r)的循環(huán)
對(duì)這個(gè)實(shí)例來(lái)說(shuō),這是r指向‘a(chǎn)’,p也指向'a',那么條件成立,p 和r都向后移動(dòng)一位,繼續(xù)
比較,這時(shí)r指向了b,p也指向了'b',條件又成立,p和r再都向后移動(dòng)一位,這時(shí)r已經(jīng)指向了
末尾,所以while循環(huán)的條件判斷不成立,循環(huán)結(jié)束,
跳出來(lái)判斷一下if(*r=='\0') 成立,表示剛才循環(huán)跳出是因?yàn)檎业揭粋€(gè)匹配的子串,所以n
計(jì)數(shù)器加1,str也指向下一個(gè)字符'b'
回到最初的循環(huán)后p指向了'b',r又重新指向了'a',這時(shí)while(*r)進(jìn)入后判斷條件不成立,所以立即退出循環(huán),這時(shí)由于r還沒(méi)有指向末尾,所以退出循環(huán)后的if語(yǔ)句條件不成立,n不會(huì)增加;
str仍然指向下一個(gè)字符;
依次類推,當(dāng)str遍歷每一個(gè)源串的字符時(shí),n就記錄了子串出現(xiàn)的次數(shù)。
他說(shuō)的是字串出現(xiàn)的次數(shù)
合理 怎么不合理呢?
這類型的題 說(shuō)字串 意思都是 只要能匹配不在同一位置的就算
這個(gè)不是把字串拿走 只是比較
//??這里提供一個(gè)在字符串中查找字串的函數(shù)findstr(),并由運(yùn)行截圖,供參考。
#include?stdio.h
int?findstr(char?*s,char?*d)?{
char?*p?=?s,*q;
int?i;
while(*p)?{
i?=?p?-?s;
q?=?d;
while(*p?==?*q)?{?p++;?q++;?}
if(*q?==?'\0')?return?i;
p?=?s?+?(++i);
}
return?-1;
}
int?main()?{
char?*s?=?"精品辦公水杯";
char?*d?=?"杯";
int?result?=?findstr(s,d);
if(result?=?0)?printf("【%s】在【%s】中的索引位置是:%d。\n\n",d,s,result);
else?printf("沒(méi)找到。\n\n");
return?0;
}
返回該字符串的首地址,用char*表示,如果不存在,則返回空指針NULL
#includestdio.h
#includestring.h
int?findstr(char?*s_str,char?*d_str);
int?main(void)?{
char?s1[80],s2[80];
int?n;
printf("請(qǐng)輸入一個(gè)字符串:");
gets(s1);
printf("請(qǐng)輸入你要查找的字符串:");
gets(s2);
n=findstr(s1,s2);
printf("%s在%s里共有%d個(gè)\n",s2,s1,n);
return?0;
}
int?findstr(char?*s_str,char?*d_str)?{
int?i,j,k,count=0;
char?temp[80];
int?length=strlen(d_str);
for(i=0;istrlen(s_str);i++)?{
k=0;
for(j=i;ji+length;j++)
temp[k++]=s_str[j];
temp[k]='\0';
if(!strcmp(temp,d_str))?count++;
}
return?count;
}
#includereg51.h
#define GPIO_DIG P0//這個(gè)意思是用GPIO_DIG來(lái)代替P0,后面只要出現(xiàn)了GPIO_DIG就是指P0 sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisplayData[8];
void DigDisplay(); //這里是一個(gè)子函數(shù)的名字告訴單片機(jī)你的代碼里有個(gè)叫DigDisplay的子函數(shù) void main(void)// 必須這樣,man函數(shù)是非常必要無(wú)可替代的。
{
unsigned char i;
for(i=0;i8;i++)
{
DisplayData[i]=DIG_CODE[i];//i可以去任意值 比如DisplayData[1]=DIG_CODE[1] }
while(1)
{
DigDisplay();
}
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
for(i=0;i8;i++)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;/
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
case(7):
LSA=1;LSB=1;LSC=1; break;
}
GPIO_DIG=DisplayData[i];//段碼就是讓數(shù)碼管顯示阿拉伯?dāng)?shù)字的一個(gè)碼制,1~9 碼制不一樣
j=10;
while(j--);
GPIO_DIG=0x00;//消隱的意思是當(dāng)顯示完一個(gè)數(shù)字后要對(duì)段碼清零不然你肉眼會(huì)看到數(shù)碼管拖著個(gè)影子一樣有點(diǎn)模糊,做了消隱處理看起來(lái)就會(huì)很清晰
}
}