我也試了一下,沒問題,你到底是什么問題,是要在s1或s2中輸入空格嗎?那么用gets函數(shù);
成都創(chuàng)新互聯(lián)服務(wù)電話:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域十余年,包括花箱等多個行業(yè)擁有多年的網(wǎng)站維護(hù)經(jīng)驗,選擇成都創(chuàng)新互聯(lián),為企業(yè)錦上添花。
gets()函數(shù)用來從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)讀取字符串直到換行符結(jié)束,但換行符會被丟棄,然后在末尾添加'\0'字符。
其調(diào)用格式為:gets(s);
其中s為字符串變量(字符串?dāng)?shù)組名或字符串指針)。
gets(s)函數(shù)與scanf("%s:",s)/*scanf("%s",s)*/相似,但不完全相同,使用scanf("%s",s);函數(shù)輸入字符串時存在一個問題,就是如果輸入了空格會認(rèn)為字符串結(jié)束,空格后的字符將作為下一個輸入項處理,但gets()函數(shù)將接收輸入的整個字符串直到遇到換行為止。
你改為:
#includestdio.h
voidmain()
{chars1[50],s2[50];
gets(s1);
gets(s2);
printf("%s\n",s1);
printf("%s\n",s2);
}
這樣就用回車表示輸入結(jié)束
由于測試,我代碼中“要查找的字符串”和“目標(biāo)字符串”,我都用常量賦值了。如果你想寫手動輸入字符串或從文件讀取,自己寫輸入賦值給這個兩個變量就行。
代碼主要功能:SINX *findStr(int benIndex,char *tStr,char *fStr);
從目標(biāo)字符串tStr中查找指定的字符串fStr,benIndex是查找的起始位置,首次調(diào)用benIndex=0。
查找下一個時,benIndex取上次查找返回值SINX-endIndex+1。
#include?stdio.h
#include?malloc.h
#include?string.h
typedef?struct?strIndex//查找字符串在目標(biāo)字符串中首字符下標(biāo)和尾字符下標(biāo)
{
int?benIndex;
int?endIndex;
}SINX;
SINX?*findStr(int?benIndex,char?*tStr,char?*fStr);//benIndex:查找的起始下標(biāo)。找到則返回對應(yīng)下標(biāo)結(jié)構(gòu),未找到返回NULL
int?main()
{
SINX?*findSINX=NULL;
int?n,benIndex=0;
//tStr:目標(biāo)字符串,fStr:要查找的字符串
char?*tStr="djasdasl?aaa?djsalkdjsakdj?aaa?dsakd;sakd;all";
char?*fStr="aaa";
printf("查找字符串:\n%s\n",fStr);
printf("目標(biāo)字符串:\n%s\n",tStr);
while(1)
{
findSINX=findStr(benIndex,tStr,fStr);
if(findSINX)
{
printf("\n找到!!,首字符在第%d個字符位置,尾字符在第%d個字符位置\n",findSINX-benIndex+1,findSINX-endIndex+1);
printf("\n1、查找下一個;2、結(jié)束;??輸入:");
n=scanf("%d",n);
if(n==1)
benIndex=findSINX-endIndex+1;
else
break;
}
else
break;
}
return?0;
}
SINX?*findStr(int?benIndex,char?*tStr,char?*fStr)//benIndex:查找的起始下標(biāo)。找到則返回對應(yīng)下標(biāo)結(jié)構(gòu),未找到返回NULL
{
int?tLen=strlen(tStr),fLen=strlen(fStr),i,j,k;
SINX?sinx,*reSINX=NULL;
sinx.benIndex=sinx.endIndex=-1;
for(i=benIndex;itLen;i++)
{
k=i;
for(j=0;jfLen;j++)
{
if(tStr[k]!=fStr[j])
break;
else
if(sinx.benIndex==-1)
sinx.benIndex=k;
k++;
}
if(j==fLen)
{
sinx.endIndex=k-1;
break;
}
else
sinx.benIndex=sinx.endIndex=-1;
}
if(sinx.benIndex==-1)
return?NULL;
reSINX=(SINX?*)malloc(sizeof(SINX));
if(!reSINX)
{
printf("異常!查找失?。?);
return?NULL;
}
*reSINX=sinx;
return?reSINX;
}
結(jié)果出來了,你看看吧,滿意請采納
#include?stdio.h
#include?string.h
void?finddd(char?x[]);
int?main()
{
char?a[150];
char?*aa;
int?a1;
int?i;
printf("請輸入任意的字符串:?");
gets(a);
finddd(a);
return?0;
}
void?finddd(char?x[])???????//?不帶數(shù)據(jù)返回?
{
int??i,shu=0;
char?aa[100];???????????????
int??aaa[200]={0};
for(i=0;istrlen(x);i++)
{
if(aaa[?x[i]?]?==?0)
{
aaa[?x[i]?]?=?1;
aa[shu++]=x[i];
}
}
aa[shu++]='\0';
printf("剔除重復(fù)字符后的字符串:?%s\n",aa);
}
C語言中的標(biāo)準(zhǔn)函數(shù)庫中的strchr()函數(shù)可以實現(xiàn)查找字符串中的某個字符。
C語言strchr()函數(shù):
查找某字符在字符串中首次出現(xiàn)的位置
頭文件:#include string.h
strchr() 用來查找某字符在字符串中首次出現(xiàn)的位置,其原型為:
char * strchr (const char *str, int c);
【參數(shù)】str 為要查找的字符串,c 為要查找的字符。
strchr() 將會找出 str 字符串中第一次出現(xiàn)的字符 c 的地址,然后將該地址返回。
注意:字符串 str 的結(jié)束標(biāo)志 NUL 也會被納入檢索范圍,所以 str 的組后一個字符也可以被定位。
【返回值】如果找到指定的字符則返回該字符所在地址,否則返回 NULL。
返回的地址是字符串在內(nèi)存中隨機(jī)分配的地址再加上你所搜索的字符在字符串位置。設(shè)字符在字符串中首次出現(xiàn)的位置為 i,那么返回的地址可以理解為 str + i。
提示:如果希望查找某字符在字符串中最后一次出現(xiàn)的位置,可以使用 strrchr() 函數(shù)。
用strstr這個函數(shù)
包含文件:string.h
函數(shù)名: strstr
函數(shù)原型:extern char *strstr(char *str1, char *str2);
功能:找出str2字符串在str1字符串中第一次出現(xiàn)的位置(不包括str2的串結(jié)束符)。
返回值:返回該位置的指針,如找不到,返回空指針。