我能知道为什么我的代码没有像预期的那样表现吗?

时间:2016-09-28 14:20:33

标签: c++ arrays

这是练习:

*问题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;
}

3 个答案:

答案 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;
}