我一直试图创建一个完全基于数组而非字符串的搜索功能。目前我似乎发现的问题是,代码是在标记位置,而没有真正找到正确的字母。最终的目标是让代码找到完整的单词,并说明它是多少个字符到行。任何帮助将是非常感激的。
int main()
{
int read = 1, i = 0, z = 0, q, o = 0, b;
char a[15];
char letters [] = "HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK";
printf("HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK\n");
printf("Please type in a word to search for in upper case:\n");
scanf(" %c", &a[1]);
scanf("%c", &a[2]);
if (a[2] != '\n') {scanf("%c", &a[3]); q=2;}
if (read == 1) {if (a[3] != '\n') {scanf("%c", &a[4]); q=3;} else read = 0;}
if (read == 1) {if (a[4] != '\n') {scanf("%c", &a[5]); q=4;} else read = 0;}
if (read == 1) {if (a[5] != '\n') {scanf("%c", &a[6]); q=5;} else read = 0;}
if (read == 1) {if (a[6] != '\n') {scanf("%c", &a[7]); q=6;} else read = 0;}
if (read == 1) {if (a[7] != '\n') {scanf("%c", &a[8]); q=7;} else read = 0;}
if (read == 1) {if (a[8] != '\n') {scanf("%c", &a[9]); q=8;} else read = 0;}
if (read == 1) {if (a[9] != '\n') {scanf("%c", &a[10]); q=9;} else read = 0;}
if (read == 1) {if (a[10] != '\n') {scanf("%c", &a[11]); q=10;} else read = 0;}
if (read == 1) {if (a[11] != '\n') {scanf("%c", &a[12]); q=11;} else read = 0;}
if (read == 1) {if (a[12] != '\n') {scanf("%c", &a[13]); q=12;} else read = 0;}
if (read == 1) {if (a[13] != '\n') {scanf("%c", &a[14]); q=13;} else read = 0;}
if (read == 1) {if (a[14] != '\n') {scanf("%c", &a[15]); q=14;} else read = 0;}
while (i != 1){
printf("line read\n");
if (a[1] == letters[z]){
printf("Found");
for (int p=0; p < q; p++){
o = z+p;
printf("checking for word\n");
if (a[p] == letters[o]){
printf("That bitch");}
else {break;}
}}
z++;
if (letters[z]=='\n'){i = 1;}
}
printf("%c", letters[z]);
printf("hmmm");
}
这段重新定义的代码应该对你有用。
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK";
char letter[100];
int i, j, k, counter;
i = j = k = counter = 0;
printf("%s\n", str);
printf("Enter a substring to find: ");
scanf("%s", letter);
for (i = 0; str[i]; i++) { // str[i] != '\0'
if (str[i] == letter[j]) {
for (k = i, j = 0; str[k] && letter[j]; j++, k++)
if (str[k] != letter[j])
break;
if (!letter[j]) { // when letter[j] meets false and substring found
printf("\nFound at %d!\n", counter);
return 0;
}
} else {
printf("."); // for decoration
counter++;
}
}
printf(" No matches!\n");
return 0;
}
样本输出
HELLOMYNAMEISELDERPRICEANDIHAVECOMETOSHAREWITHYOUTHISMOSTAMAZINGBOOK
Enter a substring to find: BOOK
................................................................
Found at 64!