C字符串处理函数来获取子字符串[关闭]

Posted

技术标签:

【中文标题】C字符串处理函数来获取子字符串[关闭]【英文标题】:C string handling function to get substring [closed] 【发布时间】:2015-01-27 13:24:41 【问题描述】:

我记得 C 或 C++ 中的一个函数可以做这样的事情:

string = "Hello my name is: 1234567 have a good day!"
function(string, "Hello my name is: %s have a good day!", substring)

子字符串为1234567。那是什么function

【问题讨论】:

您正在寻找sscanf。 不太确定,但也许this 可以提供帮助? @JosephMansfield 先生,你比我快 9 秒。 :-) 【参考方案1】:

在 C 语言中,您可以使用 sscanf() 做到这一点。当然,C 中没有 string 数据类型,但是:

#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;

【讨论】:

【参考方案2】:

sscanf 是您搜索的函数。

【讨论】:

@simonc 不,应该是snprintf()。打印输出,扫描输入。【参考方案3】:

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

如果你的前缀字符串总是以格式开头:“你好,我的名字是:”你可以这样做:

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]);

【讨论】:

【参考方案4】:

您可能正在寻找 sscanf,但您可能需要 C++ 正则表达式。

std::regex开头:

std::regex re( "Hello my name is: \b(\w+)\b have a good day!" );

然后把它放到一个函数中:

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 相比,这为您提供了更多的控制权,而且只需要多做一点工作。

live example

超越正则表达式达到完全解析。

此解决方案使用 C++11 功能。一些编译器的 &lt;regex&gt; 标头基本上也是存根,因此请检查编译器支持。

【讨论】:

以上是关于C字符串处理函数来获取子字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]

C ++ - 处理字符串的最佳线程数[关闭]

C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引和结束索引抽取字符串内容的子字符串(左闭右开区间)

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引和结束索引抽取字符串内容的子字符串(左闭右开区间-1代表最后一个索引位置)