У меня есть эта программа, которая находит подстроку в строке. Он работает для небольших входов. Но не удается для длинных входов. Вот программа:Работает для короткого ввода, не работает для длительного ввода. Как решить?
//Find Substring in given String
#include <stdio.h>
#include <string.h>
main()
{
//Variable Initialization
int i=0,j=0,k=0;
char sentence[50],temp[50],search[50];
//Gets Strings
printf("Enter Sentence: ");
fgets(sentence,50,stdin);
printf("Enter Search: ");
fgets(search,50,stdin);
//Actual Work Loop
while(sentence[i]!='\0')
{
k=i;j=0;
while(sentence[k]==search[j])
{
temp[j]=sentence[k];
j++;
k++;
}
if(strcmp(temp,search)==0)
break;
i++;
}
//Output Printing
printf("Found string at: %d \n",k-strlen(search));
}
Работы для:
Enter Sentence: good evening
Enter Search: evening
Found string at 6
Сбой для:
Enter Sentence: dear god please make this work
Enter Search: make
Found string at 25
что совершенно неправильно. Может ли какой-нибудь эксперт найти решение?
P.S: Это вроде как изобретать колесо, так как strstr() имеет эту функциональность. Но я пытаюсь небиблиотечный способ сделать это.
Ugh. Fortran77 мертв. Можете ли вы использовать лучшие имена переменных. У тебя болит голова :) –
@ Майкл Дорган: Я признаю, что проработал в FORTRAN 77 профессионально еще в прошлом году. Однако, я думаю, что i, j, k - вполне законные переменные управления контуром. Короткие области видимости оправдывают короткие имена переменных, IMO. –
У меня нет проблем с i. Я не буду бить ресницы в j. i, jk, толкает его - особенно вне контекста for loop, где вещи начинают запутываться. –