循环过早终止以进行多个查询

时间:2017-07-21 11:24:31

标签: c++ c++11 pattern-matching

对于this问题,我需要进行多次查询,因此我使用for循环

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int>ans; //vector to store the ans
    string s,e; //real dna and virus dna 
    cin>>s;
    int q,start,match=0; // no. of queries, starting value of the query, var to store matching occurence
    unsigned int step=0; //var to keep count of virus dna iteration

    cin>>q;
    for(int i=0;i<q;i++){//loop to iterate q times 
        cin>>start;
        int l,r,x,c; 
    if(start==2){ // for 2nd type query
            cin>>l>>r>>e;

        for(int i=l-1;i<=r-1;i++){
            if(s[i]==e[step]){
                match+=1;   
            }
            step+=1;
            if(step== e.length()){
                step=0;        //starting again from start of virus
            }
        }   
        }
ans.push_back(match);
match=0;   //reintializing value for next query


    if(start==1){ //for 1st type query
        cin>>x>>c;
        s[x-1]=c; //replacing char at x-1 with c
    }


}


for(int j=0;j<ans.size();j++){ //loop for ans output
    cout<<ans[j]<<endl;
}

    return 0;
}

但它应该在它之前终止:对于此输入,

ATGCATGC
4  
2 1 8 ATGC  
2 2 6 TTT  
1 4 T 
2 2 6 TA

它将在第5行停止并打印8,2,0,0,而它应该是8,2,4。如果我在没有循环的情况下进行单独查询,则可以正常工作,但任何类型的循环都不起作用。请帮忙。此外,任何有效解决此类问题的建议对我都非常有帮助。

1 个答案:

答案 0 :(得分:0)

代码中的更大问题是变量c被定义为int

int l,r,x,c;

在接收字符而非整数(T,在您的示例中)时,应将其定义为char

int l,r,x; 
char c; 

如果cint,则将4 T发送至

cin>>x>>c;

x收到4,c没有收到TT并非有效int),所以开始下一次迭代外部循环,称为

cin>>start;

T保留在缓冲区中时; start是整数,因此存在同样的问题,程序结束。

而且,正如很快指出的那样,ans.push_back()应该在第一个if中。现在添加一个值(零),行也以1开头。