我试图在文本中找到模式,出了什么问题?

时间:2017-02-22 16:47:49

标签: c++ algorithm

var Charcter = function Character( name ) {
    this.id = {
        'name' : name,
        'class' : 'ranger',
        'level' : 1
    }
    this.stats = {
        'str' : 10,
        'dex' : 18,
        'con' : 14,
        'int' : 10,
        'wis' : 16,
        'cha' : 16
    };
    this.skills = [
        'archery',
        'horsemanship'
    ];
};
Character.prototype = {
    'get' : function get( subType, fieldName ) {
        return this[subType][fieldName];
    }
};

var shilly = new Character('shilly');

console.log('I am a ' + shilly.get('id', 'class') + ' of level ' + shilly.get('id', 'level') );
console.log('My second skill is ' + shilly.get('skills', 1) + '.' );

如果模式s2存在于文本s1中,则搜索模式s2。并且计数器被设置为写入模式匹配的内容。计数器必须等于#include <iostream> using namespace std; int main() { string s1="panamabananas"; string s2="nana"; int i,j,k=0; string count=""; for(i=0;i<s1.length();i++) { k=0; if(s2[k]==s1[i]); { count+=s2[k]; for(j=i+1;j<i+s2.length();j++) { k++; if(s2[k]==s1[j]) { count+=s2[k]; cout<<"it is: "<<count<<endl; } else { count=""; break; } } } } cout<<"the matched string is "<<count; return 0; } ,但它表示文本nana中存在nana。 我不明白这里出了什么问题。

1 个答案:

答案 0 :(得分:0)

看起来你甚至在找到模式后重置计数,因为你没有做任何事情来突破外部for循环并继续。它将第一个字符串中的nana与第二个字符串中的nana进行比较,找到匹配,从内部for循环中删除,然后返回到外部for循环。稍后它将到达s1中的最后一个n,再次触发if语句,并尝试将“nas”与“nana”匹配。当s与n不匹配时,它将count重置为“”。

无论如何,如果你添加一个if语句来检查k是否是s2的长度,那么你可以在找到模式后立即返回。

无论如何,从查看代码看起来就是这样。我建议您使用调试器来完成代码,这样您就可以看到发生了什么。