读取.txt文件并将所有通过isalpha()的字符放入char数组中。对于空格,它放置\ 0,因此数组中的字符由字符串分隔。这有效。
我需要第二部分的帮助。我需要读取用户输入的字符串(让我们称之为目标字符串),在char数组中找到目标字符串的所有实例,然后为每个实例: 1.在目标字符串前打印5个单词 2.打印目标字符串本身 3.打印目标字符串后的5个单词
我无法弄明白,我一般都是C的新手,而且从Java开始,我觉得这个i / o真的很难。任何帮助将不胜感激,这是我现在的代码:
#include <stdio.h>
#include <string.h>
main(argc, argv)
int argc;
char *argv[];
{
FILE *inFile;
char ch, ch1;
int i, j;
int arrayPointer = 0;
char wordArray [150000];
for (i = 0; i < 150000; i++)
wordArray [i] = ' ';
/* Reading .txt, strip punctuation, conver to lowercase, add char to array */
void extern exit(int);
if(argc > 2) {
fprintf(stderr, "Usage: fread <filename>\n");
exit(-1);
}
inFile = fopen(argv[1], "r");
ch = fgetc(inFile);
while (ch != EOF) {
if(isalpha(ch)) {
wordArray [arrayPointer] = tolower(ch);
arrayPointer++;
}
else if (isalpha(ch1)) {
wordArray [arrayPointer] = '\0';
arrayPointer++;
}
ch1 = ch;
ch = fgetc(inFile);
}
fclose;
/* Getting the target word from the user */
char str [20];
do {
printf("Enter a word, or type \"zzz\" to quit: ");
scanf ("%s", str);
char* pch;
pch = strstr(wordArray, str);
printf("Found at %d\n", pch - wordArray + 1);
pch = strstr(pch + 1, str);
} while (pch != NULL);
}
答案 0 :(得分:2)
这里有很多问题,但可能最让你失望的问题是使用strstr
,因为你已经得到了它。两个参数都是字符串;第一个是大海捞针,第二个是针。 C字符串的定义(基本上)是由'\ 0'终止的字符序列。看看你是如何构建wordArray
的;它实际上是一系列的一个接一个的字符串。因此,当您第一次使用strstr
时,您只会看第一个字符串。
我意识到这不是您正在寻找的完整答案,但希望它能为您指明正确的方向。您可能需要考虑建立一个char *
数组,指向每个单词的wordArray
。迭代该新数组检查用户正在寻找的字符串。如果你找到它,你现在有了一个可以向前和向后工作的索引。