文字列内の単語を逆にする文字列を指定すると、文字列内の各単語を1つずつ逆にします。


文字列単語を逆にする文字列を指定すると、文字列内の各単語を1つずつ逆にします

注:
スペース文字は単語を形成しません。
入力文字列の前後に余分なスペースを含めることができますが、逆の文字を含めることはできません。
2つの単語の間に余分なスペースがある場合は、反転後の単語間のスペースを1つだけに減らします。

例
分析:文字列を逆にする前に、単語間余分なスペースを削除する方法について考える必要があります。ここでは、C ++で提供されているisringstreamメソッドのみを使用します(このメソッドを使用しない場合は、ダブルポインターを使用して削除できます)スペース)。各単語を取り出して文字列変数に保存します。
余分なスペースを削除した後、次のことを確認します。全体を逆にすると、単語の順序が逆になり、次に各単語を内部的に逆にしてターゲット文字列を取得します。上図↓
ここに画像の説明を挿入
コードは以下の通りです。

class Solution {
    
    
public:
	void reverse(string& str, int left, int right) {
    
    //反转字符串
		while (left < right) {
    
    
			swap(str[left++], str[right--]);
		}
	}

	string reverseWords(string& s) {
    
    
		istringstream iss(s);
		string tmp;
		string str;
		while (iss >> tmp) {
    
    
			str += tmp + ' ';
		}
		int len = str.length();
		str.erase(len - 1);//去掉末尾的' '

		int left = 0, right = len - 2;
		reverse(str, left, right);
		str += ' ';//末尾添上空格符作为标记
		right = 0;
		while (left < len) {
    
    
			while (str[right] != ' ' && right < len)
				right++;//出循环之后right停留在' '位置
			reverse(str, left, right - 1);
			left = right++ + 1;
            
		}
		str.erase(len - 1);//除去末尾的 ' '
		return str;
	}
};

おすすめ

転載: blog.csdn.net/Genius_bin/article/details/113777129