習題8 6 刪除字元(重寫字串思想)

2021-10-10 19:45:26 字數 1464 閱讀 8578

本題要求實現乙個刪除字串中的指定字元的簡單函式。

void delchar( char *str, char c );
其中char *str是傳入的字串,c是待刪除的字元。函式delchar的功能是將字串str**現的所有c字元刪除。

#include #define maxn 20

void delchar( char *str, char c );

void readstring( char s ); /* 由裁判實現,略去不表 */

int main()

/* 你的**將被嵌在這裡 */

a
hppy new yer
#define maxn 20

void delchar(char *str, char c);

void readstring(char s);

int main()

void readstring(char s)

void delchar(char *str, char c)

i++; //不符合要求的直接i++跳過

} str[j] = '\0'; //在這需要讓str的重寫結束

}

關於str[j]= '\0'; 的理解

試數:輸入0 回車 輸入012345

結果會顯現為123455 而不是12345

分析過後發現:例如0是需要捨去的,0為str的第乙個元素,str[0]不會進if判斷,然而i++了。

即後續的重寫均為str[i]=str[i+1],即i比j多1,所以說經過字元的刪除,重寫後的str是比重寫前的str元素少的。

不加str[j]= '\0';就會使重寫後的str多出原str位置上的字元,因為他們未被改寫。

且j經過++後,str[j]已經是改寫完成後的陣列的最後一位了,此時把'\0'寫進去,即可扔掉後續的未被改寫的字元。

void delchar(char *str, char c)

//因為剔除掉了乙個所以減t

t++;

} }}

可能是更好一點的方法?反正第一眼是看不明白。

倒序遍歷str,找到符合條件的元素後,開始操作:把這個元素換成後面乙個元素,然後迴圈。

細節在於判斷條件,j < maxn - t ; t是為了計數共刪除了幾次字元而定義的。迴圈每一次即往前寫乙個元素。

迴圈後令t++,下一次再進迴圈t就是2了,為了減少迴圈次數而設定的t。嘗試了一下,直接寫j < maxn ,也能通過。

記住這個倒序遍歷然後往前退格的思想吧。

2020.11.24的理解。

望後續有能力補充修改。

習題8 6 刪除字元

習題8 6刪除字元 本題要求實現乙個刪除字串中的指定字元的簡單函式。void delchar char str,char c 其中char str是傳入的字串,c是待刪除的字元。函式delchar的功能是將字串str中出現的所有c字元刪除。include define maxn 20 void de...

習題8 6 刪除字元

習題8 6 刪除字元 20分 本題要求實現乙個刪除字串中的指定字元的簡單函式。void delchar char str,char c 其中char str是傳入的字串,c是待刪除的字元。函式delchar的功能是將字串str 現的所有c字元刪除。include define maxn 20 voi...

字串 刪除小寫字母字串中重複字元

問題描述 刪除小寫字母字串中重複字元。如果可以,優先刪除重複字元中排在比他小字元前面的字元。比如,輸入 bbcacdww 輸出 bacdw 問題分析 就是將原來字串中的相同的刪除乙個,這個考慮是否需要額外的儲存空間,實現1 空間複雜度為o 1 void removesame string s 實現2...