Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取子字符串的C字符串处理函数 我记得C或C++中的函数,可以做这样的事情:< /P> string = "Hello my name is: 1234567 have a good day!" function(string, "Hello my name is: %s have a good day!", substring)_C++_C_String - Fatal编程技术网

获取子字符串的C字符串处理函数 我记得C或C++中的函数,可以做这样的事情:< /P> string = "Hello my name is: 1234567 have a good day!" function(string, "Hello my name is: %s have a good day!", substring)

获取子字符串的C字符串处理函数 我记得C或C++中的函数,可以做这样的事情:< /P> string = "Hello my name is: 1234567 have a good day!" function(string, "Hello my name is: %s have a good day!", substring),c++,c,string,C++,C,String,子字符串是1234567。那是什么函数?是您要搜索的函数。在C中,您可以使用。当然,C中没有字符串数据类型,不过: #include <stdio.h> int main(void) { const char string[] = "Hello my name is: 1234567 have a good day!"; char substring[32]; if(sscanf(string, "Hello my name is: %31s have a good

子字符串是1234567。那是什么函数?

是您要搜索的函数。

在C中,您可以使用。当然,C中没有字符串数据类型,不过:

#include <stdio.h>

int main(void)
{
  const char string[] = "Hello my name is: 1234567 have a good day!";

  char substring[32];
  if(sscanf(string, "Hello my name is: %31s have a good day!", substring) == 1)
  {
    printf("got '%s'\n", substring);
  }
  return 0;
}

似乎您正在尝试提取数字,而不是真正提取子字符串

如果您的前缀字符串总是以以下格式开头:Hello我的名字是:You can do:

const auto size = strlen("Hello my name is: ");
int substring = stoi(string.substr(size));
如果您不确定前缀,那么我建议使用正则表达式:

smatch m;
regex_search(string, m, regex(".*?(-?\\d+)"));
int substring = stoi(m[1]);

你可能正在寻找sSCANF,但是你可能想要C++正则表达式。 从std::regex开始:

然后将其放入函数:

std::string get_name( std::string const& src ) {
  static std::regex re( R"-(Hello my name is: (\w+) have a good day!)-" ); 
  std::smatch results;
  bool bworked = std::regex_match( src, results, re );
  if (!bworked) return {};
  // Assert(results.size() >= 2);
  if (results.size() < 2) return {};
  return results.str(1);
}
这比sscanf提供了更多的控制,只需多做一点工作

超越正则表达式,在解析时达到完全解析


此解决方案使用C++11功能。有些编译器的头也基本上是存根,所以请检查编译器支持情况。

您正在寻找。不太确定,但可能会有所帮助?@JosephMansfield先生,您比我快了9秒:-@西蒙斯:不,那是snprintf。打印输出,扫描输入。
std::string get_name( std::string const& src ) {
  static std::regex re( R"-(Hello my name is: (\w+) have a good day!)-" ); 
  std::smatch results;
  bool bworked = std::regex_match( src, results, re );
  if (!bworked) return {};
  // Assert(results.size() >= 2);
  if (results.size() < 2) return {};
  return results.str(1);
}