Untitled

 avatar
unknown
c_cpp
3 years ago
2.9 kB
13
Indexable
#include<stdio.h>
#include<string.h>
#include<strings.h>
#include<stdbool.h>
#include <ctype.h>
#define PRINT(n) printf("%s", n)
char input[1000000];
char phase[100][100000];
char article[1000000];
int type;
char *token;
int article_L;
int phase1_L;
void findstr(int head, int tail){
    bool isFind=false;
    PRINT("the word is: ");
    for(int i=head;i<tail;i++){
        printf("%c",article[i]);
    }
    PRINT("\n");
    for(int i=head;i<=tail-phase1_L;i++){
        if(strncmp(&article[i], phase[0], phase1_L) == 0){
            isFind=true;
            article[i]='^';
            break;
        }
    }
    if(isFind){
        for(int i=head;i<tail;i++){
            if(article[i] == '^'){
                printf("%s",phase[1]);
                i += phase1_L-1;
            }
            else{
                printf("%c",article[i]);
            }
        }
        PRINT("\n");
    }
}
void findStr(int head, int tail){
    bool isFind=false;
    PRINT("the word is: ");
    for(int i=head;i<tail;i++){
        printf("%c",article[i]);
    }
    PRINT("\n");
    for(int i=head;i<=tail-phase1_L;i++){
        if(strncasecmp(&article[i], phase[0], phase1_L) == 0){
            isFind=true;
            article[i]='^';
            break;
        }
    }
    if(isFind){
        for(int i=head;i<tail;i++){
            if(article[i] == '^'){
                printf("%s",phase[1]);
                i += phase1_L-1;
            }
            else{
                printf("%c",article[i]);
            }
        }
        PRINT("\n");
    }
}
int main(){
    fgets(input, 1000000, stdin);
    token = strtok(input, " \r\n");
    int pos=0;
    while(token != NULL){
        strcpy(phase[pos++],token);
        token = strtok(NULL, " \r\n");
    }
    phase1_L=strlen(phase[0]);
    if(pos == 2){
        type = 1;
        PRINT("this is case 0\n");
    }
    else if(pos == 3 && (strcmp(phase[2], "-i") == 0) ){
        type = 2;
        PRINT("this is case 1\n");
    }
    else{
        type = 3;
        PRINT("The input format: string1 string2 [parameter]\n");
        return 0;
    }
    while(fgets(article, 1000000, stdin) != NULL){
        article_L = strlen(article);
        int head, tail;
        bool setHead = true;
        for (int i=0;i<article_L;i++){
            if(setHead && (isalnum(article[i]) || article[i]=='-')){
                head = i;
                setHead = false;
            }
            if(!(isalnum(article[i]) || article[i]=='-') && !setHead){
                setHead=true;
                tail = i;
                if(type == 1){
                    findstr(head, tail);
                }
                else{
                    findStr(head, tail);
                }
            }
        }
    }
}
Editor is loading...