2011-01-28 125 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。迭代新數組檢查用戶正在查找的字符串。如果你找到它,你現在有一個可以向後和向前工作的索引。