Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 이진 문자열의 1 사이에 0이 있는지 확인하십시오.

<시간/>

여기서 우리는 한 가지 흥미로운 문제를 보게 될 것입니다. 문자열의 1 사이에 0이 있는지 확인해야 합니다. 그렇지 않으면 문자열이 유효하고 그렇지 않으면 유효하지 않습니다. 세 개의 문자열이 있다고 가정합니다 -

  • 10001111010
  • 00001111100
  • 01111101111

이 세 문자열 중에서 1의 스트림 안에 0이 없기 때문에 B만 유효합니다.

이 문제를 해결하기 위해 우리는 문자열에 있는 처음 1의 인덱스를 찾고 마지막 1의 인덱스도 찾습니다. 그런 다음 이 두 인덱스에서 0이 있는지 확인하고, 그렇다면 false를 반환하고 그렇지 않으면 false를 반환합니다. 참(유효)

예시

#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