2011-01-28 158 views
0

通过.txt文件读取并将所有通过isalpha()的字符置于char数组中。对于它放置\ 0的空格,所以数组中的字符由字符串分隔。这工作。帮助C字符串输入/输出

我需要第二部分的帮助。我需要读取用户输入的字符串(让它称为目标字符串),查找字符数组中目标字符串的所有实例,然后为每个实例: 1.打印目标字符串前面的5个字 2 。打印目标字符串本身 3.打印目标字符串后的5个字

我无法弄清楚,我是一般的新来的C,我发现这个I/O真的很难来自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

当你运行你的程序时会发生什么?你期望你的代码做什么,它有什么不同? – 2011-01-28 01:46:59

回答

2

有许多这里的问题,但很可能绊倒您最是利用strstr因为你已经得到了一个它。两个参数都是字符串;第一个是干草堆,第二个是针。 C字符串的定义(基本上)是以'\ 0'结尾的一系列字符。看看你如何构建你的wordArray;它实际上是一系列的字符串。所以当你第一次使用strstr时,你只会看第一个字符串。

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