Untitled
unknown
plain_text
a year ago
3.2 kB
6
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