#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define SIZE 40
int counterline(FILE *Ptr) { //計算過濾檔行數
char buffer[SIZE];
int counter = 0;
while (fgets(buffer
, SIZE
, Ptr
) != NULL
) { //一次一行,有讀到字則counter+1 counter++;
}
return counter;
}
void filter(FILE *Ptr, char **input, int times) { //讀取過濾檔
for (int i = 1; i <= times; i++) { //times為行數
char buffer[SIZE];
fgets(buffer
, SIZE
, Ptr
); int length
= strlen(buffer
); //讀取字串長
for (int j = 1; j <= length; j++) {
while (isspace(buffer
[j
- 1])) { //處理buffer中不為英數的字 for (int k = j; k <= length; k++) {
buffer[k - 1] = buffer[k];
}
length--;
}
}
input
[i
- 1] = (char*)malloc(sizeof(char)*(length
+ 1)); strcpy(input
[i
- 1], buffer
); //buffer轉存input }
}
void write(FILE *fPtr, char content[]) {
for (int index = 0; content[index] != '\0'; index++) {
fputc(content
[index
], fPtr
); }
}
FILE* open(char fileName[], char type[]) {
FILE
*fPtr
= fopen(fileName
, type
); if (fPtr == NULL) {
printf("The file opened error.\n"); }
return fPtr;
}
void fill(FILE *Ptr, char ** filter, int times) {
char ch;
char buffer[20];
long counter = 0;
int c = 0;
while ((ch
= fgetc(Ptr
)) != EOF
) {
buffer[c] = ch;
c++;
}
else {
buffer[c] = '\0';
for (int i = 1; i <= times; i++) {
if (strcmp(buffer
, filter
[i
- 1]) == 0) { fseek(Ptr
, counter
, SEEK_SET
); for (int i = 1; i <= c + 1; i++) {
}
}
}
counter += c; // <---待修
c = 0;
buffer[c] = '\0';
}
}
}
int main(int argc, char *argv[]) {
char **input; //二維動態陣列
FILE *inputPtr = open(argv[1], "r");
int line = counterline(inputPtr);
input
= (char **)malloc(sizeof(char*)*line
); filter(inputPtr, input, line);
FILE *inPtr = open(argv[2], "r+");
fill(inPtr, input, line);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgojaW5jbHVkZTxjdHlwZS5oPgojZGVmaW5lIFNJWkUgNDAKCmludCBjb3VudGVybGluZShGSUxFICpQdHIpIHsJCQkJCQkJLy/oqIjnrpfpgY7mv77mqpTooYzmlbgKCWNoYXIgYnVmZmVyW1NJWkVdOwoJaW50IGNvdW50ZXIgPSAwOwoKCXdoaWxlIChmZ2V0cyhidWZmZXIsIFNJWkUsIFB0cikgIT0gTlVMTCkgewkJCS8v5LiA5qyh5LiA6KGM77yM5pyJ6K6A5Yiw5a2X5YmHY291bnRlcisxCgkJY291bnRlcisrOwoJfQoKCXJldHVybiBjb3VudGVyOwp9Cgp2b2lkIGZpbHRlcihGSUxFICpQdHIsIGNoYXIgKippbnB1dCwgaW50IHRpbWVzKSB7CQkvL+iugOWPlumBjua/vuaqlAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IHRpbWVzOyBpKyspIHsJCQkJCS8vdGltZXPngrrooYzmlbgKCgkJY2hhciBidWZmZXJbU0laRV07CgkJZmdldHMoYnVmZmVyLCBTSVpFLCBQdHIpOwoJCWludCBsZW5ndGggPSBzdHJsZW4oYnVmZmVyKTsJCQkJCS8v6K6A5Y+W5a2X5Liy6ZW3CgoJCWZvciAoaW50IGogPSAxOyBqIDw9IGxlbmd0aDsgaisrKSB7CgkJCXdoaWxlIChpc3NwYWNlKGJ1ZmZlcltqIC0gMV0pKSB7CQkvL+iZleeQhmJ1ZmZlcuS4reS4jeeCuuiLseaVuOeahOWtlwoJCQkJZm9yIChpbnQgayA9IGo7IGsgPD0gbGVuZ3RoOyBrKyspIHsKCQkJCQlidWZmZXJbayAtIDFdID0gYnVmZmVyW2tdOwoJCQkJfQoJCQkJbGVuZ3RoLS07CgkJCX0KCQl9CgoJCWlucHV0W2kgLSAxXSA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpKihsZW5ndGggKyAxKSk7CgkJc3RyY3B5KGlucHV0W2kgLSAxXSwgYnVmZmVyKTsJCQkJCS8vYnVmZmVy6L2J5a2YaW5wdXQKCX0KfQoKdm9pZCB3cml0ZShGSUxFICpmUHRyLCBjaGFyIGNvbnRlbnRbXSkgewoJZm9yIChpbnQgaW5kZXggPSAwOyBjb250ZW50W2luZGV4XSAhPSAnXDAnOyBpbmRleCsrKSB7CgkJZnB1dGMoY29udGVudFtpbmRleF0sIGZQdHIpOwoJfQoJZnB1dGMoJ1xuJywgZlB0cik7Cn0KCkZJTEUqIG9wZW4oY2hhciBmaWxlTmFtZVtdLCBjaGFyIHR5cGVbXSkgewoJRklMRSAqZlB0ciA9IGZvcGVuKGZpbGVOYW1lLCB0eXBlKTsKCWlmIChmUHRyID09IE5VTEwpIHsKCQlwcmludGYoIlRoZSBmaWxlIG9wZW5lZCBlcnJvci5cbiIpOwoJCWV4aXQoMSk7Cgl9CglyZXR1cm4gZlB0cjsKfQoKdm9pZCBmaWxsKEZJTEUgKlB0ciwgY2hhciAqKiBmaWx0ZXIsIGludCB0aW1lcykgewoJY2hhciBjaDsKCWNoYXIgYnVmZmVyWzIwXTsKCWxvbmcgY291bnRlciA9IDA7CglpbnQgYyA9IDA7CgoKCXdoaWxlICgoY2ggPSBmZ2V0YyhQdHIpKSAhPSBFT0YpIHsKCQlpZiAoIWlzc3BhY2UoY2gpKSB7CgoJCQlidWZmZXJbY10gPSBjaDsKCQkJYysrOwoJCX0KCQllbHNlIHsKCQkJYnVmZmVyW2NdID0gJ1wwJzsKCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gdGltZXM7IGkrKykgewoJCQkJaWYgKHN0cmNtcChidWZmZXIsIGZpbHRlcltpIC0gMV0pID09IDApIHsKCQkJCQlmc2VlayhQdHIsIGNvdW50ZXIsIFNFRUtfU0VUKTsKCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSBjICsgMTsgaSsrKSB7CgkJCQkJCWZwdXRjKCcgJywgUHRyKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJY291bnRlciArPSBjOwkJCQkJCQkJCS8vIDwtLS3lvoXkv64KCQkJYyA9IDA7CgkJCWJ1ZmZlcltjXSA9ICdcMCc7CgkJfQoKCX0KfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewoJY2hhciAqKmlucHV0OwkJCQkJCQkJCS8v5LqM57at5YuV5oWL6Zmj5YiXCglGSUxFICppbnB1dFB0ciA9IG9wZW4oYXJndlsxXSwgInIiKTsKCglpbnQgbGluZSA9IGNvdW50ZXJsaW5lKGlucHV0UHRyKTsKCXJld2luZChpbnB1dFB0cik7CQkJCQkJCQkKCglpbnB1dCA9IChjaGFyICoqKW1hbGxvYyhzaXplb2YoY2hhciopKmxpbmUpOwkKCWZpbHRlcihpbnB1dFB0ciwgaW5wdXQsIGxpbmUpOwoKCUZJTEUgKmluUHRyID0gb3Blbihhcmd2WzJdLCAicisiKTsKCWZpbGwoaW5QdHIsIGlucHV0LCBsaW5lKTsKCgoKCglmY2xvc2UoaW5wdXRQdHIpOwoJZnJlZShpbnB1dCk7CglzeXN0ZW0oInBhdXNlIik7Cn0=