Untitled
unknown
plain_text
5 months ago
3.2 kB
2
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define N 202 #define L 10010 void find_args(char str[], char args[])//擷取參數部分 { memset(args, 0, L); int num = 0, idx = 0; for(int i = 0;str[i] != '\0';i++) { if(str[i] == '"') { num++; } else if(num == 2) { args[idx++] = str[i]; } } args[idx] = '\0'; } char prin(char input[], char ans[]) { char temp[L]; strcpy(temp, input); char *token = strtok(temp, "("); if(strcmp(token, "printf") == 0) { int idx = 0, cursor = 0, flag = 0; char *format = strtok(NULL, "\""); //I2P1 is very %d%c for me. char args[L]; find_args(input, args);//, 1, 'z' for(int i = 0;format[i] != '\0';i++) { if(format[i] == '%') { if(format[i+1] == 'd') { for(int j = cursor;args[j] != '\0';j++) { if(isdigit(args[j])) { ans[idx++] = args[j]; flag = 1; } else if(flag) { flag = 0; cursor += 2; i += 1; break; } cursor++; } } else if(format[i+1] == 'c') { if(args[cursor] == '\'' && args[cursor+2] == '\'') { ans[idx++] = args[cursor+1]; } i += 1; cursor += 5; } } else { ans[idx++] = format[i]; } } ans[idx] = '\0'; printf("%s\n", ans); } else if(strcmp(token, "for") == 0) { int num1 = 0, num2 = 0, flag = 1; for(int i = 0;input[i] != '\0';i++) { if(isdigit(input[i]) && flag == 1) { num1 = num1*10 + (input[i] - '0'); } else if(isdigit(input[i]) && flag == 0) { num2 = num2*10 + (input[i] - '0'); } else if(num1 > 0) { flag = 0; } } char temp1[L]; strcpy(temp1, input); char *s1 = strtok(temp1, "\""); char *s2 = strtok(NULL, "\""); for(int i = 0;i<num2-num1;i++) { printf("%s", s2); } printf("\n"); } } int main(void) { int n; char str[N][L]; scanf("%d\n", &n); for(int i = 0;i<n;i++) { char ans[L]; fgets(str[i], L, stdin); str[i][strcspn(str[i], "\n")] = '\0';//將'\n'改為'\0' prin(str[i], ans); } return 0; }
Editor is loading...
Leave a Comment