Untitled
unknown
c_cpp
4 years ago
3.7 kB
14
Indexable
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int position[1000000];
int posCount=0;
char *cmpStr="- ";
char *Strstr(char *a,const char *b){
int len_b = strlen(b);
while(*a){
if(strncasecmp(a,b,len_b)==0){
return a;
}
a++;
}
return NULL;
}
char *str_replace (char *source, char *find, char *rep, bool isI){
int find_L=strlen(find);
int rep_L=strlen(rep);
int length=strlen(source)+1;
int gap=0;
char *result = (char*)malloc(sizeof(char) * length);
strcpy(result, source);
char *former=source;
char *location;
if(isI){
location= Strstr(former, find);
}
else{
location= strstr(former, find);
}
while(location!=NULL){
gap+=(location - former);
position[posCount++]=gap;
result[gap]='\0';
length+=(rep_L-find_L);
result = (char*)realloc(result, length * sizeof(char));
strcat(result, rep);
gap+=rep_L;
former=location+find_L;
strcat(result, former);
if(isI){
location= Strstr(former, find);
}
else{
location= strstr(former, find);
}
}
return result;
}
char *str1,*str2,*str3,*token;
char ary[10000000];
int type;
char input[100000];
int main(){
str1=malloc(10000*sizeof(char));
str2=malloc(10000*sizeof(char));
str3=malloc(10000*sizeof(char));
memset(str1,0,sizeof(0));
memset(str2,0,sizeof(0));
memset(str3,0,sizeof(0));
gets(input);
token=strtok(input, cmpStr);
if(token!= NULL ) {
strcpy(str1,token);
token=strtok(NULL, cmpStr);
}
if(token!= NULL ) {
strcpy(str2,token);
token=strtok(NULL, cmpStr);
}
if(token!= NULL ) {
strcpy(str3,token);
token=strtok(NULL, cmpStr);
}
//printf("%s\n%s\n%s\n",str1,str2,str3);
//printf("%d\n%d\n%d\n",strlen(str1),strlen(str2),strlen(str3));
int str1Len=strlen(str1);
int str2Len=strlen(str2);
int str3Len=strlen(str3);
if(token!= NULL){
type=3;
}
else if(str2Len==0){
type=3;
}
else if(str3Len==0){
type=1;
}
else if(strcmp(str3,"i")==0){
type=2;
}
int aryLen;
char *ans;
while(gets(ary)!=NULL){
if(type==1){
memset(position,0,sizeof(position));
posCount=0;
ans=str_replace(ary,str1,str2,false);
int pre=-1000;
for(int i=0;i<posCount;i++){
int j=position[i];
while(j-1>=0 && (isalnum(ans[j-1]) || ans[j-1]=='-') ){
j--;
}
if(pre==j){
continue;
}
pre=j;
char *tmp=&ans[j];
sscanf(tmp,"%[a-zA-Z0-9-]",tmp);
printf("%s\n",tmp);
}
}
else if(type==2){
memset(position,0,sizeof(position));
posCount=0;
ans=str_replace(ary,str1,str2,true);
int pre=-1000;
for(int i=0;i<posCount;i++){
int j=position[i];
while(j-1>=0 && (isalnum(ans[j-1]) || ans[j-1]=='-') ){
j--;
}
if(pre==j){
continue;
}
pre=j;
char *tmp=&ans[j];
sscanf(tmp,"%[a-zA-Z0-9-]",tmp);
printf("%s\n",tmp);
}
}
else{
printf("The input format: string1 string2 [parameter]\n");
}
}
}
/*
he it
g thedfhe he
*/
Editor is loading...