2016-04-15 2 views
0

Учитывая строку массива, я должен ввести слово и найти вхождения слова в строке, однако я не могу ввести слово, для которого мне нужно найти это событие. Я не могу использовать указатели, поскольку он не был охвачен программой. Помощь будут оцененыЧисло вхождений в строке

#include <stdio.h> 
#include <strings.h> 
int main() 
{ 
    char sentence[100],word[20],temp[20]; 
    int i=0,j=0,occurrences=0; 
    scanf("%[ ^\n]s",sentence); 
    printf("Enter the word to be searched:\n"); 
    fgets(word,20,stdin); 
    while(sentence[i]!='\0') 
    { 
     while(sentence[i]!=' '&&sentence[i]!='\0') 
     { 
      temp[j++]=sentence[i]; 
      i++; 
     } 
     temp[j]='\0'; 

     if((strcmp(temp,word))==0) 
     occurrences++; 

     if(sentence[i]==' ') 
     j=0; 
    } 
    printf("Number of Occurrences of the word are %d",occurrences); 
    return 0; 
} 
+0

... и ваша точка? Содержит ли этот код? Что оно делает? Что вы хотите сделать вместо этого? –

+0

Я несколько вещей, прежде чем идти глубже. 1.- Я рекомендую прочитать о [safe scanf] (http://stackoverflow.com/questions/1621394/how-to-prevent-scanf-causing-a-buffer-overflow-in-c), у вас может быть потенциал переполнение там. 2. - Компиляция вашего кода, он сбрасывает «неизвестный» strcmp. Посмотрите, используете ли вы правильные заголовки. – Joel

+0

Вы * * с помощью указателей, так используется ваше использование 'strcmp' незаконно? Если нет, вы можете использовать 'strstr'. –

ответ

1
  • Имя заголовка string.h не strings.h.
  • использовать scanf(" %s",word); вместо fgets(word,20,stdin); для ввода word. Пространство перед %s, чтобы потреблять пробелы.
  • Также вы должны добавить i++ после j=0 в свой код, поэтому это работает бесконечно.

Вы код должен быть таким:

#include <stdio.h> 
#include <string.h> //fix 1 
int main() 
{ 
    char sentence[100],word[20],temp[20]; 
    int i=0,j=0,occurrences=0; 
    scanf("%[^\n]s",sentence); 
    printf("Enter the word to be searched:\n"); 
    scanf(" %s",word); //fix 2 
    while(sentence[i]!='\0') 
    { 
     while(sentence[i]!=' '&&sentence[i]!='\0') 
     { 
      temp[j++]=sentence[i]; 
      i++; 
     } 
     temp[j]='\0'; 

     if((strcmp(temp,word))==0) 
     occurrences++; 
     if(sentence[i]==' ') 
     { 
      j=0;i++; //fix 3 
     } 
    } 
    printf("Number of Occurrences of the word are %d",occurrences); 
    return 0; 
} 
+0

Помните, что в конце как 'предложение', так и' word' будет '' новая строка'. –

+0

Когда я вводил «привет привет» и вводил слово для поиска в качестве приветствия, он не возвращает никакого вывода. –

+0

@ LashhanthDhevaraju Вы прочитали мой комментарий или комментарий от @BLUEPIXY? –

0
  1. Изменение #include <strings.h> в #include <string.h>.

  2. scanf("%[ ^\n]s", sentence); не будет функционировать, как вы ожидаете. Чтобы ввести строки, содержащие пробельные символы, вместо этого вы должны использовать fgets(word, 20, stdin);. Не забудьте обработать «\ n».

  3. Удалите это '\ n' в word.

Кстати, следующий код кажется мне яснее:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char sentence[100], word[20]; 
    int occurrences = 0, i = 0; 
    fgets(sentence, 100, stdin); 
    sentence[strcspn(sentence, "\n")] = '\0'; 
    printf("Enter the word to be searched:\n"); 
    fgets(word, 20, stdin); 
    word[strcspn(word, "\n")] = '\0'; 
    while(strlen(word) + i <= strlen(sentence)) 
    { 
     if(memcmp(word, sentence + i, strlen(word) - 1) == 0) 
      occurrences++; 
     i++; 
    } 
    printf("Number of Occurrences of the word are %d", occurrences); 
    return 0; 
} 
Смежные вопросы