【问题标题】:Substring Search with Syscall使用 Syscall 进行子字符串搜索
【发布时间】:2014-03-06 09:20:25
【问题描述】:

我正在尝试使用 sys 调用进行子字符串搜索,在该调用中我从命令行打开文件,并将以下命令行参数与文件进行比较。我想输出每个子字符串的出现次数。例如,如果我写了 ./a.out 文件名 aa b 我正在寻找 aa 和 b 在文件名中出现的次数。

到目前为止我的代码

for(int num = 4; num < argc; num++)
    {
      int fp = open (argv[1], O_RDONLY);
      int sizeofbar = strlen(argv[1]);
      char *buf = (char*)malloc(sizeofbar+1);
      int count = 0;  //counter for output                                  
      char* string2 = argv[num];
      int sizeofcompare = strlen(string2);

      read(fp, buf, sizeofcompare);
      while (strstr(buf, string2) != NULL)
        {

          count++;
          buf++;
        }

【问题讨论】:

    标签: c search substring


    【解决方案1】:

    我认为您需要在进入循环之前进行一些初始化。也许你想先去掉第一个参数:

    filename = argv[0];    
    argv++;
    argc--;
    int fp = open(...
    

    接下来,我将预处理其余参数以构建数据结构来存储它。您可以使用 argc 值来确定需要跟踪的字数。

    counts = (int *)calloc(argc, sizeof(int));
    

    请注意,这也会为您将值初始化为零。

    设置完所有内容后,我将通读整个文件内容并与字符串进行比较。诀窍是一次比较多个不同长度的字符串。一个简单但低效的方法是读取整个文件内容,然后对文件名后面的每个单词使用 strstr 循环。另一种方法是将文件的内容映射到内存中并直接扫描它(让操作系统完成繁重的工作)。

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 2013-08-09
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2020-07-23
      • 2018-05-26
      相关资源
      最近更新 更多