2014-02-09 54 views
0

我想做一個使用sys調用的子字符串搜索,其中我從命令行打開一個文件,並將以下命令行參數與該文件進行比較。我想輸出每個子字符串的出現次數。例如,如果我寫./a.out文件名aa b我正在尋找文件名中發生aa和b次數。Substring使用系統調用搜索

到目前爲止我的代碼

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++; 
     } 

回答

0

我想你需要進入你的循環之前做一些初始化。也許你想先來第一個參數關:

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

接下來,我會預先處理的剩餘參數建立一個數據結構來存儲它。您可以使用argc值來確定需要跟蹤的單詞數量。

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

請注意,這也會將您的值初始化爲零。

隨着一切設置,然後我會通讀整個文件的內容並與字符串進行比較。訣竅是一次比較多個不同長度的字符串。一種簡單而低效的方法是讀取整個文件內容,然後使用strstr爲文件名後面的每個單詞循環。另一種方法是將文件內容映射到內存並直接掃描(讓操作系統完成繁重工作)。