翻轉字串 不用額外的記憶體空間

2021-08-28 17:10:36 字數 946 閱讀 8536

給定乙個字串,逐個翻轉字串中的每個單詞。

說明

單詞的構成:無空格字母構成乙個單詞

樣例

給出s = 「the sky is blue」,返回"blue is sky the"

使用std::string的find_first_of,以』 '為引數,將s分割成多個單詞並推進堆疊中,然後利用堆疊的先進後出的特點,以彈出的順序去得到逆序的字串。這樣會使用額外的空間來暫存堆疊的資料。

在原先的s的基礎上,利用兩個索引:tail , head將s整個翻轉,得到eulb si yks eht

可以觀察的到,eulb si yks eht與目標結果:blue is sky the的差別在於,前者每個單詞都是反的。

故可以使用std::string的find_first_of,以』 '為引數,將s分割成多個單詞,每個單詞再次使用上述方式:使用tail,head整體翻轉,即可得到目標結果。

string reversewords(string &s) 

//再逐單詞逐單詞翻轉,這樣可以達到無需任何額外的空間即可翻轉成功

found = s.find_first_of(' ');

int curr = 0;

bool flag = true;

while (flag)

// temp_str = s.substr(curr, found - curr);

//翻轉temp

tail = found-1;//-1為去除空格

head = curr;

while (head < tail)

curr = found+1;

found = s.find_first_of(" ", found + 1);

} return s;

}

關於字串和記憶體空間的一些知識

include stdafx.h include include using namespace std char getspace int tmain int argc,tchar argv strcpy s str,sizeof hello tempstr cout str endl retur...

翻轉字串的解法

char reversestring char pstr return pstr char reversestring char pstr assert pstr null int len strlen pstr char p pstr static int i 1 用於p len i,p len ...

字串的翻轉總結

給定乙個字串,如 csdn 編寫函式返回翻轉為 ndsc 的結果。不考慮庫函式的情況下,採用遞迴的方式,每次返回從第二位開始的子串 同時遞迴下去 加上 第一位字元 直到遞迴到剩下乙個字元則直接返回即可。public class solution public static string myreve...