如題:將字串src逆序後,經過輸出引數dest返回給呼叫方。函式原型如下:
bool convertstring(char *dest,const char*src,int destbufsize)
偶在一次面試中遇到此題,奮筆疾書寫作如下:
bool convertstring(char *dest,const char *src,size_t destbufsize)
pdest[srclen] = '\0';
return true;
}
結果別人寫測試程式,我一看傻眼了,
char src[100] = ;
char dest[100] = ;
strcpy(src,"abcdefghijklnmopqrstuvwxyz");
convertstring(src,src,sizeof(src));
很顯然上面的convertstring無法處理此種情況,結果會是字串後半部分回文2次,前半部分字串丟失,但是函式返回true。
可以看出上述函式存在很大的問題,我們來具體分析一下:
如果src位址為最上面的那個橫線,則分如下幾種情況傳dest進來
1、src與dest相互不重疊
2、src與dest位址有一部分重疊
3、src與dest位址完全重疊(包含在第二種情況中)
此時我們需要改變演算法,位址不重疊的部分使用字串拷貝賦值的方式逆轉,位址重疊的部分需要進行字串交換。
於是形成了我們新的程式:
void swap(char *src ,size_t size)
}bool convertstring(char *dest,const char *src,size_t destbufsize)
pdest[srclen] = '\0';
return true;
}
字串逆轉
題意 輸入乙個字串,逆向輸出該串。sample input 3frankly,i don t think we ll make much money out of this scheme.madam i m adam sample output hcum ekam ll ew kniht t nod...
逆轉中文字串 逆轉字串
要顯示中文必須使用unsigned char型,如果使用char 就裝不下了。然後要明白乙個unsigned char 其實只是裝了乙個中文字元的一半。列印的時候如果只列印乙個unsigned char有可能什麼都看不到。所以逆轉的時候要把兩個unsigned char看成乙個整體來交換。如下 in...
字串逆轉問題
問題描述 長度為n的字串,在第 i 的位置處向左旋轉或者向右旋轉。比如字串abcdefgh 長度n為8 若將該字串在i 3的位置處,向左旋轉則得到字串defghabc 問題要求 時間複雜度要和n成正比,記憶體幾十位元組。問題解決方法 數學基礎 即將矩陣 ab 變為ba ab a b a b a b ...