помогите с строкой ввода / вывода - PullRequest
0 голосов
/ 28 января 2011

Читает файл .txt и помещает все символы, которые передают isalpha () в массив символов. для пробелов ставится \ 0, поэтому символы в массиве разделяются строками. Это работает.

Мне нужна помощь со второй частью. Мне нужно прочитать строку, которую вводит пользователь (давайте назовем ее целевой строкой), найти все экземпляры целевой строки в массиве char и затем для каждого экземпляра: 1. напечатайте 5 слов перед целевой строкой 2. распечатать целевую строку 3. и напечатайте 5 слов после целевой строки

Я не могу понять, я новичок в C в целом, и я считаю, что это очень сложно после ввода с Java. Любая помощь будет оценена, вот код, который я сейчас имею:

#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 Ответ

2 голосов
/ 28 января 2011

Здесь есть ряд проблем, но, вероятно, больше всего вас смущает использование strstr в том виде, в каком вы его получили. Оба параметра являются строками; первый - стог сена, а второй - игла. Определение строки C - это (в основном) последовательность символов, оканчивающаяся на \ 0. Посмотрите, как вы построили свой wordArray; фактически это последовательность строк, одна за другой. Поэтому, когда вы используете strstr в первый раз, вы всегда смотрите только на первую строку.

Я понимаю, что это не полный ответ, который вы ищете, но, надеюсь, он направит вас в правильном направлении. Возможно, вы захотите создать массив из char *, который будет указывать на wordArray в каждом слове. Выполните итерацию по этому новому массиву, проверяя строку, которую ищет пользователь. Если вы найдете его, у вас теперь есть индекс, с которого вы можете работать в прямом и обратном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...