我有這個程序,它發現字符串中的子字符串。它適用於小投入。但對於長時間輸入而言失敗這裏的程序:適用於短輸入,長輸入失敗。怎麼解決?
//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()具有此功能,所以這有點像重新發明輪子。但我正在試圖以非圖書館的方式來做到這一點。
呃。 Fortran77已經死了。你可以請使用更好的變量名稱。你讓我的頭受傷:) – 2010-04-27 20:42:11
@Michael Dorgan:我承認最近去年在FORTRAN 77專業編程。但是,我認爲i,j,k是完全合法的循環控制變量。較短的可視範圍證明了短變量名稱IMO的作用。 – 2010-04-27 20:45:14
我對我沒有問題。我不會在j打一個睫毛。我,jk,正在推動它 - 特別是在循環上下文環境中,事情開始變得混亂。 – 2010-04-27 20:47:02