【问题标题】:How to extract characters from a string in C?如何从C中的字符串中提取字符?
【发布时间】:2015-07-28 13:31:22
【问题描述】:

我正在与响应 \r\n 的 GSM SIM900 模块连接。我已将 GSM 响应存储在一个数组中,需要从中提取字符。我正在检查docklight中的响应,它是这样的:

\r\n +CMTI: "SM",1 \r\n

我需要从上面提取最后一个整数 1 并将其存储在一个变量中。 这里\r\n 是回车和换行 我很困惑\r(回车)应该被视为单字符还是双字符。

代码:

char var[15] = "\r\nhello:4";
int i,l;
char k;
for(i=0;i<=10;i++)
{
  if(isdigit(var[i]))
  {
    k = var[i];
    /* l = atoi(k);  */ 
    l = atoi(&var[i]); /* Get number from string */
    printf("output=%d",k);        
    printf("done");
  }
  else
  {
    printf("NO");
  }
}

【问题讨论】:

  • 我不明白你所说的 GSM 或“它是这样的”是什么意思。实际的字符串是什么?
  • 为什么不使用循环来检查每个字符是否为数字?当字符为数字时,有一个函数返回 1。
  • 哪个功能,请告诉我
  • 你需要知道整数在哪里或者如何找到它
  • @Giorgi 我需要提取整数

标签: c string char


【解决方案1】:

两个条件使这个问题变得非常简单......位置是固定的,字符串只包含一个整数。有很多好方法,但我认为这是最简单的一种。

  1. 声明一个字符数组。

  2. 从起点开始循环。

  3. 使用isdigit()判断是否为数字。

  4. 如果是数字,则将其添加到我们声明的数组中。

  5. 循环结束后,在数组末尾添加空字符,因为它是一个 cstring。

  6. 用atoi函数将其转换为整数。

我不确定这些函数是否在标准库中。但是使用 strtok 函数会更容易实现。

【讨论】:

  • 嘿,感谢这个新的 isdigit 函数。这真的很有帮助。我正在按照您的步骤获取输出,但是当我将其转换为 int 时,它给了我分段错误。我附上了我的代码。请看一看。
  • 当您访问错误的内存位置时会发生分段错误。我猜这是因为字符串的长度是 9,但是 for 语句循环运行了 11 次。
【解决方案2】:

如果您知道引用部分不包含逗号,您可以使用strtok() 和atoi()。

【讨论】:

  • strrchr(data, ',') 可用于查找最后一个逗号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2012-03-03
相关资源
最近更新 更多