将字符串解析为多个变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串解析为多个变量相关的知识,希望对你有一定的参考价值。

嘿我有一个问题试图解析字符串。我的程序可以收到4种输入:

s = "x=10+2;"
s = "x=10+y;"
s = "x=y+10;"
s = "x=y+z;"

我的意思是格式是这样的:s = "(string)=(string)||(int)+(string)||(int);"

我曾尝试使用sscanf( s, "%c=%d+%d", &c, &v1, &v2 ),但我需要先验证它是哪种类型的输入。

char* s = "x=2+22;";
int v1, v2;
char* c;
sscanf( s, "%c=%d+%d", &c, &v1, &v2 );
printf("%s %d %d\n", c, v1, v2);

我想将字符串解析为三个变量。

答案

让我以另一种方式提出你,使用strsep和一些if条件来检测字符是整数还是字符串,以下代码适用于所有情况

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()

  char *token, *string, *var;
  char *str = "x=x+10;";
  int tmp1,tmp2;
  tofree = string = strdup(str);
  if (string == NULL)
    return -1;

  token = strsep(&string, "=");
  printf("%s\n", token);
  token = strsep(&string, "=");
  printf("%s\n", token);

  var = strsep(&token, "+");
  if( var[0] >= 0x60 && var[0] <= 0x7B ) // detect string
  
    printf("str1 = [ %s ] \n", var);
   else     // else case will be an integer
    tmp1 = atoi(var);
    printf("int1 = [ %d ] \n ",tmp1);
  

  var = strsep(&token, "+");
  var[strlen(var)-1]='\0'; // remove ";" 
  if( var[0] >= 0x61 && var[0] <= 0x7A )
  
    printf("str2 = [ %s ] \n", var);
  else
    tmp2 = atoi(var);
    printf("int2 = [ %d ] \n ",tmp2);
  

  return 0;

以上是关于将字符串解析为多个变量的主要内容,如果未能解决你的问题,请参考以下文章

Getopt :: Long将包含空格的字符串转换为变量

C ++将输入字符串解析为变量

将括号中包含多个字符串的文本解析为数组

如何将给定的字符串解析为结构变量数组

通过命令行将变量传递给powershell脚本

如何将 JSON 数组解析为字符串? [复制]