【问题标题】:Extracting numbers from a string in C++从 C++ 中的字符串中提取数字
【发布时间】:2018-05-16 14:48:31
【问题描述】:

假设我有以下 char 数组:

char *word="R12_X8_10";

位数不固定,但非数字字符的位置是固定的。如何在没有提升的情况下提取数字?我应该通过拆分单词得到 {"12", "8", "10"}。

这应该是一项简单的任务,因为我在 Java 中已经做过很多次了,但是在 C++ 中它让我的大脑感到负担。

【问题讨论】:

  • std::regex + std::atoi
  • 是的,C++ 是在消耗脑筋。
  • 声明 char *word="R12_X8_10"; 无论如何都是无效的 C++,请先修复它。

标签: c++ stringtokenizer


【解决方案1】:

C++ 流方式是获取或简单地忽略标记 字符。例如,要忽略它们,您可以使用:

const char *word = "R12_X8_10";
int i, j, k;
std::stringstream ss(word);

ss.ignore(1) >> i;
ss.ignore(2) >> j;
ss.ignore(1) >> k;

甚至(更紧凑,如果不是更易读的话):

((ss.ignore(1) >> i).ignore(2) >> j).ignore(1) >> k;

(不相关,但请注意 wordconst,因为不应将字符串字面量分配给非 const 指针)。

【讨论】:

  • 这其实是一个C++方案!
【解决方案2】:

你可以试试这个。

int a,b,c;
char *word="R12_X8_10";
    sscanf(word,"R%d_X%d_%d",&a,&b,&c);

我知道这是一个 c++ 系统,但我也知道如果包含 stdio.h,scanf 和 sscanf 可以与 c++ 编译器一起使用。

我希望这会有所帮助。

【讨论】:

  • sscanf() 在 C++ 中可以正常工作,但 char *word = "..."; 不行。并且标头应该是
  • 你说得对,我刚试过。重点是 Hassan 不会那样声明字符串。这只是一个例子
  • @Nitro,您的建议是一个很好且简单的建议。如果需要,我可以将 *char 转换为 std::string。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多