这是练习:
*问题3.
模式搜索
a)编写一个读取0和1序列的程序(用空格分隔)并检查是否 或者不是序列包含模式0 0 1.因此你的程序应该给出是/否 回答。 例如,以下每个序列包含模式0 0 1(带下划线)。 1 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 1 1 0 1 另一方面,以下序列中没有一个包含模式0 0 1。 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 您的程序应该要求用户首先输入序列中的条目数。 使用数组更容易解决此问题。您需要先通过存储来解决此问题 数组中的序列,然后处理数组。
b)(可选)重复部分(a)而不使用数组。*
这是我的b)代码,忘了a):
int num_entries = 0;
cout<<"Please enter number of entries in the sequence: ";
cin>>num_entries;
int count =0;
int a=2;
int b=2;
int c=2;
bool pattern = false;
cout<<"\n"<<"Please enter "<<num_entries<<" only 1 and 0 values here: ";
while (count<=num_entries) {
cin>>a;
if (a==0) {
cin>>b;
} else {
count++;
continue;
}
if (b==0) {
cin>>c;
} else {
count=count+2;
continue;
}
if (c==1) {
pattern = true;
break;
} else {
count=count+3;
}
}
if (pattern == true) {
cout<<"\n"<<"YES it contains the pattern 0 0 1"<<endl;
} else {
cout<<"\n"<<"NO it doesnt contain the pattern 0 0 1"<<endl;
}
答案 0 :(得分:0)
不知道您正在使用哪个IDE我无法告诉您按下启用它的确切键,但任何体面的IDE都应该允许您逐步执行并显示每个步骤的变量值。确保他们正在做你期望的事。
除此之外,无论你做什么,你都可以在每个if语句执行期间写入你的控制台或其他输出,看看你是否得到了预期的输出。对于任何给定的步骤。
单步执行代码非常优越。
答案 1 :(得分:0)
您是否希望以下列代码提供YES / NO输出:
#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
int main() {
string str = "1 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 1 1 0 1 ";
boost::regex aReg("0 0 1");
boost::smatch aWhat;
if (boost::regex_search(str, aWhat, aReg)) {
cout<<"YES it contains the pattern 0 0 1"<<endl;
} else {
cout<<"NO it doesnt contain the pattern 0 0 1"<<endl;
}
return 0;
}
答案 2 :(得分:0)
您可以获取您要搜索的字符串的所有位置:
#include <iostream>
#include <string>
int main()
{
std::string str1 = "1 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 1 1 0 1";
// std::string str2 = " 0 0 1. 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1";
std::string::size_type start_pos = 0;
while( std::string::npos !=
( start_pos = str1.find( "0 0 1", start_pos ) ) )
{
std::cout << start_pos << std::endl;
++start_pos;
}
std::cout << std::endl;
return 0;
}