2013-12-03 2 views
1

Я пытаюсь найти строку внутри другой строки («рука» в, скажем, «карма»).Ищите строку внутри другой строки и укажите местоположение в C

Если есть совпадение, я должен распечатать FOUND at (index) на консоли (здесь указатель содержит количество букв, начиная с 0).

В противном случае, я должен напечатать NOT FOUND. Прямо сейчас консоль берет оба входа, но затем завершает работу. Это то, что у меня есть до сих пор:

int main() 
{ 
    char string1[10]; 
    char string2[10]; 

    printf("Write first string: "); 
    scanf("%s", string1); 
    printf("Write second string: "); 
    scanf("%s", string2); 

    for (int i = 0; string1[i] != 0; i++) 
    { 
     if (string1[i] == string2[0]) 
     { 
      for (int j = 0; string2[j] == string1[i + j]; j++) 
      { 
       if (string2 == '\0') 
       { 
        printf("FOUND at %d", i); 
       } 
      } 
     } 

     if (string1[i] == '\0') 
     { 
      printf("NOT FOUND"); 
     } 
    } 

    return 0; 
} 

Я заранее извиняюсь за отсутствие подпрограмм. Я супер, супер новый для всего этого.

+2

Есть ли какой-то причине вы не разрешается использовать стандартные функции библиотеки? Если да, тогда, пожалуйста, скажите это. –

+0

Любые причины не использовать функции библиотеки C из 'string.h' как' strstr'? – Macmade

+0

Я предполагаю, что он получил это как задание («Я должен ...»), поэтому библиотечные функции, вероятно, обманывают. Он сделал все возможное и показал свой код, поэтому его вопрос кажется законным. – Leeor

ответ

4

strstr() будет делать именно то, что вы хотите.

2

Условие NOT FOUND никогда не будет выполнено, если string1[i] != 0 вы выходите из внешнего контура без печати.
Если вы переместите эту проверку за пределы внешнего цикла (вам нужно определить i перед циклом для этого, в контексте функции), вы сможете ударить его.

Кроме того, вы FOUND случай должен выйти из внешнего контура (обратите внимание, что простой break не хватает), в противном случае вы также попали в NOT FOUND случай

+1

+1 для адресации фактического кода OP! – CRD

+0

@CRD Что такое OP. Я еще не понял этого. –

+2

@BitFiddlingCodeMonkey - Оригинальный плакат, насколько я знаю. – CRD

2

Вы можете использовать strstr()?

Пример:

char *str = "karma"; 
char *pChPos; 

pChPos = strstr(str, "arm"); 

if(pChPos) 
    printf("Found \"arm\" at position %td\n", pChPos - str); 
else 
    printf("Didn't find it!\n"); 
+0

@ensc Спасибо за исправление. –

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