zhi_hui_kan_ti_jie @ 2022-11-17 19:45:06
#include<stdio.h>
#include<string.h>
char str[50][20];
int arr[50];
int main()
{
int n=0;
scanf("%d\n",&n);
char str1[20];
char* blank[3];
int ret;
char* ret_s;
int pre,cur;
for(int j=0;j<n;j++)
{
gets(str1);
blank[0] = str1;
int count = 0;
int len = strlen(str1);
for(int i=0;i<len;i++)
{
if(str1[i]==' ')
{
count++;
str1[i]='\0';
blank[count]=&str1[i+1];
}
}
if(count==1)
{
sscanf(blank[0],"%d",&pre);
sscanf(blank[1],"%d",&cur);
ret = pre+cur;
sprintf(ret_s,"%d",ret);
strcpy(str[j],blank[0]);
strcat(str[j],"+");
strcat(str[j],blank[1]);
strcat(str[j],"=");
strcat(str[j],ret_s);
arr[j]=strlen(str[j]);
}
else if(count==2)
{
if(*blank[0]=='a')
{
sscanf(blank[1],"%d",&pre);
sscanf(blank[2],"%d",&cur);
ret = pre+cur;
sprintf(ret_s,"%d",ret);
strcpy(str[j],blank[1]);
strcat(str[j],"+");
strcat(str[j],blank[2]);
strcat(str[j],"=");
strcat(str[j],ret_s);
arr[j]=strlen(str[j]);
}
else if(*blank[0]=='b')
{
sscanf(blank[1],"%d",&pre);
sscanf(blank[2],"%d",&cur);
ret = pre-cur;
sprintf(ret_s,"%d",ret);
strcpy(str[j],blank[1]);
strcat(str[j],"-");
strcat(str[j],blank[2]);
strcat(str[j],"=");
strcat(str[j],ret_s);
arr[j]=strlen(str[j]);
}
else if(*blank[0]=='c')
{
sscanf(blank[1],"%d",&pre);
sscanf(blank[2],"%d",&cur);
ret = pre*cur;
sprintf(ret_s,"%d",ret);
strcpy(str[j],blank[1]);
strcat(str[j],"*");
strcat(str[j],blank[2]);
strcat(str[j],"=");
strcat(str[j],ret_s);
arr[j]=strlen(str[j]);
}
}
}
for(int i=0;i<n-1;i++)
{
printf("%s\n",str[i]);
printf("%d\n",arr[i]);
}
printf("%s\n",str[n-1]);
printf("%d",arr[n-1]);
return 0;
}
by Xiphi @ 2022-11-17 19:57:24
@liuyizhe 不要用gets,有危险
by zhi_hui_kan_ti_jie @ 2022-11-17 20:48:51
@guo_jx 那怎么办啊,用scanf(" %[^n]")也不行
by Lny2010 @ 2022-11-18 17:44:06
蒟蒻看到了浅说下(第一次发没经验,望勿喷). 这个我认为可以用string类型,每次getline,这样处理字符串代码量会少点(?),然后如果想用printf的话可以用str.c_str(),返回一个字符串地址,这样就可以用字符串类型了. 对了我相信您用的是C++吧