兩個小題目。
乙個是:字串裡面只有字母和星號,要求把星號移動最左邊,字母移動到最右邊,要求複雜度盡可能低。
比如「a*b*c*d*」移動之後成為」****abcd」
這個題目有兩個方法,首先就是暴力解法。從串尾或者串首判斷(假設串尾),如果是星號則移動到串首起第乙個不是星號的位置,然後把從那個位置開始的串統統後移一位到星號處。複雜度應該是 平方級。
這個方法的劣勢就在於字母移動的位置可能不是最終位置。而下面這個方法是一步到位地令非星號移動到最終位置:
新增乙個變數j表示當前已經移動的字母的下標,初始值為len-1,
然後從後面逆序掃瞄字串,如果是星號則繼續掃瞄,如果不是訊號,則拷貝這個資料到j所在位置,同時j也自減。
這樣乙個週期走完之後,所有字母均移動好,剩下的就是把j個前位置全部重置為星號。這樣複雜度只有o(n)
**為:
bool
check(char c)
void move(char * p, int len)
int main()
; move(a, 10);
cout << a << endl;
return
0;}
第二題:給定乙個母串和子串,要求刪除所有和子串資料相同的字元,比如
「welcome to asted」模式串為」aeiou」結果要求為」wlcm t std」要求效能最優。
用上述的方法二,得到的**為:
bool
check(char c, char *pset, int setlen)
return
false;
}void move(char * p, int len, char *pset, int setlen)
int main()
; char b = ;
move(a, sizeof(a)-1, b, sizeof(b)-1);
cout << a << endl;
system("pause");
return
0;}
全文完 字串刪除
description 定義mystring類,包括 乙個字元陣列或字元指標,用於儲存字串內容。void input 讀取乙個不含空白符的字串。void output 輸出一行字串。void del char str 從當前字串中刪除str中的所有字元。input 兩個不含空白符的字串,每個佔一行。...
字串刪除
輸入兩個字串,從第乙個字串中刪除第二個字串中的所有字元,不可以使用replace 例如 輸入 they are students 和 aeiou 則刪除之後的第乙個字串變成 they r stdnts var str1 they are students str2 aeiou res 思路 判斷乙個...
ORACLE in 字串,字串,字串
因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...