第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

運(yùn)行結(jié)果為"The substring is:national"?為什么

運(yùn)行結(jié)果為"The substring is:national"?為什么

C PHP
猛跑小豬 2023-03-15 21:17:18
編寫字符串處理函數(shù)_strstr(str1, str2),返回str1串中與str2相同的子串和其后續(xù)字符.下面的是執(zhí)行結(jié)果正確的程序:字符串匹配函數(shù)char* _strstr(char* a,char* b)#include "stdio.h"//#include <string.h>int _strlen(char* a){int i;for(i=0;a[i];i++);return i;}int _strncmp(char* a,char* b,int n){int i=0,s;while(a[i]==b[i] && a[i])i++;if(i>=n)return 0;else if(i<n && a[i]-b[i])return 1;else return -1;}char* _strstr(char* a,char* b){int len2;if ( !(len2 = _strlen(b)) )return a;for ( ; *a; ++a ){if ( *a == *b && _strncmp( a, b, len2 )==0 )return a;}return NULL;} int main(void){char *str1 = "Borland International", *str2 = "nation", *ptr;//clrscr();ptr = _strstr(str1, str2);printf("The substring is: %s\n", ptr);return 0;}運(yùn)行結(jié)果為"The substring is:national"其中的字符串比較函數(shù)_strncmp是用本人自己的算法寫的,現(xiàn)在有個(gè)問題,就是當(dāng)用msdn中關(guān)于strcmp函數(shù)的算法寫一個(gè)本程序中的_strncmp函數(shù)時(shí),為什么執(zhí)行的結(jié)果會(huì)是(null)呢?代碼如下:#include "stdio.h"//#include <string.h>int _strlen(char* a){int i;for(i=0;a[i];i++);return i;}int _strncmp(char* a,char* b,int n){int i=0,s;while(!(s=a[i]-b[i]) && a[i] && i<=n)i++;if(s<0)return -1;if(s>0)return 1;elsereturn 0;}char* _strstr(char* a,char* b){int len2;if ( !(len2 = _strlen(b)) )return a;for ( ; *a; ++a ){if ( *a == *b && _strncmp( a, b, len2 )==0 )return a;}return NULL;} int main(void){char *str1 = "Borland International", *str2 = "nation", *ptr;//clrscr();ptr = _strstr(str1, str2);printf("The substring is: %s\n", ptr);return 0;}
查看完整描述

2 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

仔細(xì)看看這兩段代碼就知道了:
關(guān)鍵,字符串后面都以 \0字符結(jié)束,而你的strlen函數(shù)是計(jì)算了\0字符的。
int _strncmp(char* a,char* b,int n)
{
int i=0,s;
while(a[i]==b[i] && a[i])
i++;
if(i>=n) //關(guān)鍵在這里,你的算法中,如果b比a短,也就是比較到了\0時(shí),i=0,返回了0,即相等
return 0;
else if(i<n && a[i]-b[i])
return 1;
else 
return -1;
}

int _strncmp(char* a,char* b,int n)
{
int i=0,s;
while(!(s=a[i]-b[i]) && a[i] && i<=n) //他的算法中,你傳遞的n是包含\0字符的,因此當(dāng)b比a短的時(shí)候,必然會(huì)比較到 s=a[n]-b[n] ,s <> 0 ,因此返回的必然是非0,即不等,所以。。。
i++;
if(s<0)
return -1;
if(s>0)
return 1;
else
return 0;
}

查看完整回答
反對 回復(fù) 2023-03-18
?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

void ltrim(char str[])
{
int count=0;//記錄字符串左邊有多少個(gè)空格
char *p=NULL;
p=str;
while(*p==' ' && *p!='\0')//循環(huán)檢查左邊空格的個(gè)數(shù)
{
count++;
p++;
}

p=str+count;
while(count>0 && *p!='\0')//循環(huán),把后面的字符前移
{
*(p-count)=*p;
p++;
}
*(p-count)='\0';
}

void rtrim(char str[])
{
int count=0;//記錄字符串右邊有多少個(gè)空格
char *p=NULL;
p=str;

while(*p!='\0')//循環(huán)找到字符串結(jié)束
{
p++;
}

p--;
while(p>=str && *p==' ')//循環(huán)消滅后面的空格
{
*p='\0';
p--;
}
}

void trim(char str[]) //直接調(diào)用上面兩個(gè)函數(shù)
{
ltrim(str);
rtrim(str);
}

void delchar(char str[],char ch) 
{
int count=0;
char *p1=NULL,*p2=NULL,*Y=NULL;
p1=str;
while(*p1!='\0')
{
p1++;
count++;
}
Y=(char *)malloc(count+1);//為了節(jié)約運(yùn)算時(shí)間,申請一個(gè)緩沖內(nèi)存
//malloc函數(shù)要求引入#include<stdlib.h>函數(shù)
p1=str;
p2=Y;
while(*p1!='\0')
{
if(*p1!=ch)
{
*p2=*p1;
p2++;
}
p1++;
}
*p2='\0';

p1=str;
p2=Y;
while(*p2!='\0')
{
*p1=*p2;
p1++;
p2++;
}
*p1='\0';
free(Y);//釋放內(nèi)存
}


查看完整回答
反對 回復(fù) 2023-03-18
  • 2 回答
  • 0 關(guān)注
  • 107 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)