2015-09-01 3 views
0
#include <stdio.h> 
#include <string.h> 

int count (const char *str, const char *search); 

int count (const char *str, const char *search) 
{ 
    int counter = 0,flag = 0; 
    const char *holdstr, *holdsearch; 
    do 
    { 
     for (holdstr = str, holdsearch = search ; 
      *holdsearch != '\0' && *holdstr == *holdsearch ; 
      holdsearch++,holdstr++) {} 

      if (*holdsearch == '\0') 
      { 
       counter++; 
       flag = 1; 
      } 

    }while (*(str++)); 

    if (flag) return counter; 
    return -1; 
} 

int main() 
{ 
    const char *find = "the"; 
    const char *arr1 = "the cat sat on the mat"; 
    const char *arr2 = "theqqqqq cat sat on the mat"; 
    const char *arr3 = "-qthe-- cat sat on theok mat"; 

    int val = count(arr1, find); 
    printf("%d\n", val); 
    val = count(arr2, find); 
    printf("%d\n", val); 
    val = count(arr3, find); 
    printf("%d\n", val); 

    return 0; 
} 

Я пытаюсь найти взаимно однозначные слова. Но у меня есть и другие слова, в которые включено указанное слово. Функция аналогична функции strstr(). Я также понял, что он идет за strstr() Как может быть проблема исправлена?слово появление в строке с использованием указателя

Output     Expected Output 
-------     --------------- 
2      2 
2      1 
2      0 
+3

Ваша функция работает правильно. Вы ожидали, что выход будет неправильным в отношении функции. Чтобы исправить это, вам нужно определить пробелы и проверить слова. – Enerccio

+1

почему вы ожидаете 1 за последнее? не должно быть нуля? и вам нужно проверить, действительно ли совпадение - это слово (что означает, что ему предшествует символ не-слова, за которым следует символ без слов) – x4rf41

+0

да, вы правы, исправлено @ x4rf41 – snr

ответ

1

образец идеи затруднительного

int count (const char *str, const char *search) 
{ 
    int counter = 0; 
    const char *holdstr, *holdsearch, *wordtop, *s=str; 
    do 
    { 
     for (wordtop = holdstr = s, holdsearch = search ; 
      *holdsearch != '\0' && *holdstr == *holdsearch ; 
      holdsearch++,holdstr++) 
      ; 
     //     top    space      end   space 
     if (!*holdsearch && (wordtop == str || isspace(wordtop[-1])) && (!*holdstr || isspace(*holdstr))) 
     { 
      counter++; 
     } 

    }while (*s++); 

    return counter;//no needs flag if return 0; 
} 
+0

Что означает 'wordtop [-1]'? Кроме того, если условие '! * Containsearch' не нужно – snr

+0

Например,' wordtop [-1] '- это переднее пространство (для теста), когда' 'the' ' – BLUEPIXY

+0

Также вы можете использовать' strncmp' вместо 'for-loop'. – BLUEPIXY

Смежные вопросы