例如,我有这个字符串: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;
}

09-30 21:40
查看更多