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

ตรวจสอบว่าสตริงไบนารีมี 0 ระหว่าง 1 วินาทีหรือไม่ใน C++


เราจะเห็นปัญหาที่น่าสนใจอย่างหนึ่ง เราต้องตรวจสอบว่าสตริงมี 0 อยู่ระหว่าง 1 วินาทีหรือไม่ ถ้าไม่ใช่ แสดงว่าสตริงนั้นถูกต้อง มิฉะนั้น ไม่ถูกต้อง สมมติว่ามีสามสตริง -

  • 100011111010
  • 00001111100
  • 01111101111

จากสามสตริงนี้ มีเพียง B เท่านั้นที่ใช้ได้ เนื่องจากไม่มี 0 ในสตรีมของ 1 วินาที

เพื่อแก้ปัญหานี้ เราจะพบดัชนีของ 1 ตัวแรกอยู่ในสตริง และหาดัชนีของ 1 สุดท้ายด้วย จากนั้นเราจะตรวจสอบว่ามี 0 ใดจากดัชนีทั้งสองนี้หรือไม่ ถ้าเป็นเช่นนั้น ให้คืนค่าเท็จ มิฉะนั้น จริง (ถูกต้อง)

ตัวอย่าง

#include <iostream>
using namespace std;
bool hasZeroInOnes(string str) {
   int first, last;
   for(first = 0; first < str.length(); first++){
      if(str[first] == '1')
      break;
   }
   for(last = str.length() - 1; last >= 0; last--){
      if(str[last] == '1')
      break;
   }
   for(int i = first+1; i < last; i++){
      if(str[i] == '0')
      return false;
   }
   return true;
}
int main() {
   string str = "00001111100";
   if(hasZeroInOnes(str)){
      cout << str << " is a valid string";
   } else {
      cout << str << " is NOT a valid string";
   }
}

ผลลัพธ์

00001111100 is a valid string