#include stdio.h
創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元撫遠(yuǎn)做網(wǎng)站,已為上家服務(wù),為撫遠(yuǎn)各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
#includestdlib.h
#includestring.h
void squeeze(char* s1, const char* s2)
{
int i=0;
int j=0;
for(i=0; istrlen(s2); i++)
for(j=0; jstrlen(s1); j++)
{
if(s1[j]==s2[i])
{
s1[j]=' ';
//這里我把刪除的字符用空格替換了,當(dāng)然你也可以通過移位將后面的字符前移
}
}
}
int main()
{
char a[100], b[5];
scanf("%s%s",a,b);
printf("刪除前:%s\n",a);
squeeze(a,b);
printf("刪除后:%s\n",a);
system("pause");
return 0;
}
void?squeeze(char?s[],?int?c)
{
int?i,?j;
for?(i?=?j?=?0;?s[i]?!=?'\0';?i++)
if(s[i]?!=?c)????????//應(yīng)該是少個if關(guān)鍵字,否則編譯會錯誤的
s[j++]?=?s[i];
s[j]?=?'\0';
}
這個函數(shù)的功能是找出s1字符串中有哪些字符沒有在s2字符串中出現(xiàn),并把它們按順序形成一個新的字符串,并顯示在屏幕上。
代碼運行過程是:
按順序取出s2的一個字符,與s1中每一個字符進(jìn)行比較,把不同的字符依次放入s1中,形成新的s1字符串,再取s2的下一個字符,再與新的s1中每一個字符比較,不同的字符再次形成新的s1字符,類推,直到遍歷完全部s2字符。
疑問解答:
1.s1[k]='\0';放在那里的原因是因為形成新的s1字符必須有結(jié)束符
2.作用就是字符串結(jié)尾標(biāo)志。
3.循環(huán)過程上面所說的運行過程。
#include stdio.h
#include stdlib.h
void squeeze(char s1[],char s2[])
{
int i,j,k;
for (i=k=0;s1[i]!='\0';i++)
{
for(j=0;s2[j]!='\0's2[j]!=s1[i];j++)
;
if (s2[j]=='\0')
s1[k++]=s1[i];
}
s1[k]='\0';
printf("s1中去除與s2相同的符號后剩下的是%s\n",s1);
}
main()
{
char s1[20]="hello world!";
char s2[20]="how are you?";
squeeze(s1,s2);
}
這樣就對了,字符串?dāng)?shù)組的初始化錯了。
MATLAB是個半開源的軟件,在命令窗口輸入 type squeeze ,可以看到MATLAB中該函數(shù)的實現(xiàn)方法,然后自己寫成C語言就可以了。掌握這種方法更重要。
#includestdio.h
void Squeeze(char s[],char c) //此處修改,函數(shù)無返回值
{
int i,j;
for(i=0;s[i]=='\0';i++)//此處修改,是關(guān)系運算符,不是賦值運算符
{
j=i;
while (s[i]!=c)
{
s[i]=s[j++];
j++;
}
}
//此處修改
}
int main( )
{
char s[50];//此處修改
char c;
printf("輸入一串字符s");
scanf("%s",s);//此處修改
printf("輸入一個變量c");
scanf("%c",c);//此處修改
Squeeze(s,c); //此處修改,給出具體實參
printf("%s",s);//此處修改
return 0;
}