帮助C字符串i / o

时间:2011-01-28 01:40:07

标签: c

读取.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);
}

1 个答案:

答案 0 :(得分:2)

这里有很多问题,但可能最让你失望的问题是使用strstr,因为你已经得到了它。两个参数都是字符串;第一个是大海捞针,第二个是针。 C字符串的定义(基本上)是由'\ 0'终止的字符序列。看看你是如何构建wordArray的;它实际上是一系列的一个接一个的字符串。因此,当您第一次使用strstr时,您只会看第一个字符串。

我意识到这不是您正在寻找的完整答案,但希望它能为您指明正确的方向。您可能需要考虑建立一个char *数组,指向每个单词的wordArray。迭代该新数组检查用户正在寻找的字符串。如果你找到它,你现在有了一个可以向前和向后工作的索引。