#include <string.h> 
        #include <assert.h> 
        #include <stdio.h> 
        #define MAXCHAR 256
        class Search { 
                
                int d[MAXCHAR]; 
                int m; 
                char* patt; 
        public: 
                Search(char*); 
                int find(char*); 
        };         Search::Search(char* p) 
        { 
               assert(p);                 patt = p; 
                m = strlen(patt);                 int k = 0;                 for (k = 0; k < MAXCHAR; k++) 
                        d[k] = m;                 for (k = 0; k < m - 1; k++) 
                        d[patt[k]] = m - k - 1; 
        }         int Search::find(char* text) 
        { 
              assert(text);                 int n = strlen(text); 
                if (m > n) 
                        return -1;                 int k = m - 1;                 while (k < n) { 
                        int j = m - 1; 
                        int i = k; 
                        while (j >= 0 && text[i] == patt[j]) { 
                                j--; 
                                i--; 
                        } 
                        if (j == -1) 
                                return i + 1; 
                        k += d[text[k]]; 
                }                 return -1; 
        } 
        int main(int argc, char* argv[]) 
        { 
               assert(argc == 3);                 const int MAXLINE = 256; 
                char fbuf[MAXLINE]; 
                Search patt(argv[1]); 
                FILE* fp = fopen(argv[2], "r"); 
                assert(fp); 
                int nf = 0;                 while (fgets(fbuf, MAXLINE, fp) != NULL) { 
                        if (patt.find(fbuf) != -1) { 
                                fputs(fbuf, stdout); 
                                nf++; 
                        } 
                }                 fclose(fp);                 return !nf; 
        } 运行是出错:
Assertion failed:argc==3,file c:\2\2.cpp,lin60注:2是我的程序名。

解决方案 »

  1.   

    assert(argc == 3)这一句assert断言失败,说明argc!=3.
      

  2.   

    运行该程序需要3个参数,调试时由于没有参数输入所以到
    assert(argc == 3)处出错。如果你想让用户输入足够多的参数,可以判断argc的值,如果不对,就向用户输出使用方法并退出。
      

  3.   

    不需要三个参数,应该是两个,一个是用来构造的PATT的字符串,另一个是用来做输入的文件名.
    不过看不懂这个程序是用来做什么的.