Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ย้อนกลับคำในสตริงใน C ++


สมมติว่าเรามีสตริงที่มีคำไม่กี่คำ เราต้องกลับตำแหน่งของคำในสตริง ดังนั้นหากเชือกเป็นเหมือน “จิ้งจอกสีน้ำตาลฉูดฉาดกระโดดทับหมาขี้เกียจ”

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน getString() ซึ่งจะใช้ s เป็นอินพุต ซึ่งจะทำงานเป็น −

  • ผม :=0, j :=ขนาดของ s – 1

  • ในขณะที่ s[i] =‘ ’ และ i <ขนาดของ s ให้เพิ่ม i ขึ้น 1

  • ในขณะที่ j>=0 และ s[j] =‘ ’, ลด j โดย 1

  • ret :=สตริงว่าง

  • สำหรับ i <=j เพิ่ม i ขึ้น 1

    • หากขนาดของ ret ไม่ใช่ศูนย์และองค์ประกอบสุดท้ายของ ret คือ ' ' และ s[i] คือ ' ' ให้ทำซ้ำต่อไป

    • ret :=ret + s[i]

  • กำหนดวิธีการอื่นที่เรียกว่า reverseWords() ซึ่งจะใช้ s เป็นอินพุต

  • เจ :=0

  • สำหรับผม ในช่วง 0 ถึงขนาด s – 1 ในแต่ละขั้นตอนตั้งค่า i :=j

    • ถ้า s[i] ว่างเปล่า j :=i + 1

    • อย่างอื่น

      • ในขณะที่ j + 1 <ขนาดของ s และ s[j + 1] ไม่ใช่ช่องว่าง ให้เพิ่ม j ขึ้น 1

      • x :=ผม และ y :=j

      • ในขณะที่ x

        • แลกเปลี่ยน s[x] และ s[y] เพิ่ม x ขึ้น 1 และดับ y ทีละ 1

      • เพิ่มขึ้น 1

  • จากวิธีหลัก ให้ทำดังนี้ −

  • ย้อนกลับสตริง s

  • ย้อนกลับคำ

  • ส่งคืน getString

ตัวอย่าง (C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string reverseWords(string s) {
      reverse(s.begin(), s.end());
      reverseWordss(s);
      return getString(s);
   }
   string getString(string s){
      int i = 0;
      int j = s.size() - 1;
      while(s[i] == ' ' && i < s.size()) i++;
      while(j >= 0 && s[j] == ' ') j--;
      string ret = "";
      for(;i <= j; i++){
         if(ret.size() && ret.back() == ' ' && s[i] == ' ')continue;
         ret += s[i];
      }
      return ret;
   }
   void reverseWordss(string& s){
      int j = 0;
      for(int i = 0; i < s.size() ;i = j){
         if(s[i] == ' '){
            j = i + 1;
         }
         else{
            while(j + 1 < s.size() && s[j + 1] != ' ') j++;
            int x = i;
            int y = j;
            while(x < y){
               swap(s[x], s[y]);
               x++;
               y--;
            }
            j++;
         }
      }  
   }
};
main(){
   Solution ob;
   cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog"));
}

อินพุต

"The quick brown fox jumps over a lazy dog"

ผลลัพธ์

"dog lazy a over jumps fox brown quick The"