字串逆轉隱藏的秘密

2021-06-04 07:27:20 字數 989 閱讀 3725

如題:將字串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 ...