Этот сегмент кода, который у меня есть, является частью гораздо более крупного кода, но этот сегмент, в котором он в основном работает, является поисковым словом(); функция использует strstr для поиска всех слов, соответствующих слову слова ввода пользователя, помещает исходную позицию слова в массив целых чисел keywordsat [], чтобы я мог использовать его в строке текста печати 1. какой поисковый запрос(); return - это всего лишь количество найденных слов или 0, когда слова не найдены, dosent имеют слово. printsummary() и wordfoundYN не имеют значения для этого бита кода. Также несут в моем сообщении [] абзац, с \n
и прочее.Поиск слов в строке манипуляции
Таким образом, в основном этот код функционирует должным образом, он находит ключевые слова в массиве message [] и возвращает начальные позиции слов, помещает их в ключевые слова []. Затем, чтобы напечатать только одну строку, я возвращаюсь до предыдущего символа \n
, после чего я просто печатаю до следующего символа \n
, тем самым распечатывая строку абзаца, в котором содержится слово.
Но у меня есть проблема, скажем, предположим, что message[]={"\n the cat is in the bag.\n"}
, а затем пользователь вводит поиск слова как «он», он дважды печатает одну и ту же строку в параграфе, так как он дважды нашел слово в предложении, keywordat [] заполнил 2 номера keywordat [0] = 1 и keywordat [1] = 16. Мне было интересно, если бы в любом случае для этой программы было известно, что если 2 слова находятся в одной строке, не печатайте одну и ту же строку дважды?
...
searchwordYN=searchword();
if(searchwordYN!=0){
printsummary(d);
wordfoundYN++;
counter=0;
while(counter<searchwordYN){
i=keywordsat[counter];
while(i>=0){
if(message[i]=='\n'){
break;
}
i--;
}
for(f=i+1;f<10485760;f++){
if(message[f]=='\n'){
break;
}
printf("%c", message[f]);
}
printf("\n");
counter++;
}
counter=0;
}
...
Мой Поиск слова функция():
int searchword(){
char *ret;
int i=0;
ret = strstr(message, keyword);
if(ret==NULL){
return 0;
}
while(ret!=NULL)
{
keywordsat[i]=ret-message;
i++;
ret++;
ret = strstr(ret, keyword);
}
return i;
}
Одна из проблем заключается в том, что у вас слишком много уровней отступов для комфорта. Вы должны посмотреть, как реорганизовать ваш код на более мелкие функции. В первом фрагменте имеется только 6 уровней вдавливания, и, похоже, это может быть на 3 или 4 уровня отступа, прежде чем вы перейдете к этому коду. Страшно! Трудно справиться точно. –