例如,我有这个字符串:SMUL 9 A B
?我怎样才能得到9(int type)A(char)和B(char)。可能的字符串可能是SMUL 12 A C
,因此这意味着它们在字符串中的位置不是常量。
进一步说明:这是用户为我的矩阵计算器程序输入的字符串。输入SMUL“scalar”“matrix-1”“matrix-2”表示矩阵运算是以“scalar”作为要乘以矩阵的数的标量乘法,“matrix-1”是要乘以标量的矩阵,“matrix-2”是要显示结果的矩阵。希望你能帮助我。我的项目两天后到期。
最佳答案
strtok不可重入并在空令牌上移位。
sscanf将工作,可以检测数字或字符串列为您。
#include <stdio.h>
typedef struct {
char op[20];
union {int arg1num;char arg1str[20];} arg1;
char arg2[20],arg3[20];
} Value;
main()
{
Value v;
char withNumber[]="SMUL 9 A B ";
char withoutNumber[]="SMUL \"scalar\" \"matrix-1\" \"matrix-2\" ";
if( 4==sscanf(withNumber,"%[^ ]%d %[^ ] %[^ ]",v.op,&v.arg1.arg1num,v.arg2,v.arg3) )
printf("wN:%s %d %s %s\n",v.op,v.arg1.arg1num,v.arg2,v.arg3);
if( 4==sscanf(withoutNumber,"%[^ ] %[^ 0-9] %[^ ] %[^ ]",v.op,v.arg1.arg1str,v.arg2,v.arg3) )
printf("woN:%s %s %s %s\n",v.op,v.arg1.arg1str,v.arg2,v.arg3);
if( 4==sscanf(withoutNumber,"%[^ ]%d %[^ ] %[^ ]",v.op,&v.arg1.arg1num,v.arg2,v.arg3) )
printf("wN:%s %d %s %s\n",v.op,v.arg1.arg1num,v.arg2,v.arg3);
if( 4==sscanf(withNumber,"%[^ ] %[^ 0-9] %[^ ] %[^ ]",v.op,v.arg1.arg1str,v.arg2,v.arg3) )
printf("woN:%s %s %s %s\n",v.op,v.arg1.arg1str,v.arg2,v.arg3);
return 0;
}