例如,我有这个字符串:SMUL 9 A B
?我怎样才能得到9(int型)A(char)和B(char)。可能的字符串可能是SMUL 12 A C
,所以这意味着它们在字符串中的位置不是常量。
进一步说明:这是用户为我的矩阵计算器程序输入的字符串。输入SMUL "scalar""matrix-1""matrix-2"表示矩阵运算是一个SCALAR MULTIPLICATION,"scalar"为要乘以矩阵的数,"matrix-1"为要乘以的矩阵标量,“matrix-2”是显示结果的矩阵。希望你能帮助我。我的项目现在将在 2 天后到期。
strtok 不可重入并转移空 token 。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;
}
我是一名优秀的程序员,十分优秀!