本題要求實現乙個刪除字串中的指定字元的簡單函式。
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...