字串的反轉

2021-09-26 02:06:42 字數 1406 閱讀 7157

(1)

string s;

while(getline(cin,s)//此時輸入的空格計算在字串內

(2)

char s[50];

while(cin.getline(s,50))

(3)

vectors(len);//vector陣列中可以不定義長度,後面用push_back,此時不包含空格

for(int i = 0;i>s[i];

}

給定乙個字串,要求把字串前面的若干個字元移動到字串的尾部,如把字串「abcdef」前面的2個字元'a'和'b'移動到字串的尾部,使得原字串變成字串「cdefab」。請寫乙個函式完成此功能,要求對長度為n的字串操作的時間複雜度為 o(n),空間複雜度為 o(1)。

輸入:字串s,n(前n個字元移動到後面)

思路:可以利用反轉再反轉的方法。

首先將原字串分為兩個部分,即x:abc,y:def;

將x反轉,即得:cba;將y反轉,即得:fed。

反轉上述步驟得到的結果字串cba,fed給予反轉,cbafed得到defabc,這就實現了整個反轉

#include#include#includeusing namespace std;

void reverseting(vector&s, int start, int end)//反轉vector字元陣列

}void rotatestring(vector&s, int len, int n)//分兩部分反轉字元陣列

int main()

cin>>n;

rotatestring(s,len,n);//字元陣列的反轉

for (int i = 0; i < len; i++)//反轉後字元陣列的輸出 }

void rotatestring(char *s, int len, int n)//分兩部分反轉字元陣列

int main()

}void rotatestring(char *s, int len, int m)//分兩部分反轉字元陣列

int main()

}void revesrword(char *s, int len)

} reverseting(s,temp,len-1);

}int main()}}

if(temp.size()>0) svec.push_back(temp);//這是對最後乙個單詞進行判斷

for(int i = svec.size()-1;i>0;--i) coutsvec.clear();

word_reverse(str, svec);

}return 0;

}

參考:

字串反轉

據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...

字串反轉

include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...

字串反轉

解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...