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 功能。一些编译器的 <regex>
标头基本上也是存根,因此请检查编译器支持。
【讨论】:
以上是关于C字符串处理函数来获取子字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]
C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引和结束索引抽取字符串内容的子字符串(左闭右开区间)
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引抽取字符串内容的子字符串(如果只有一个数字默认索引到字符串结束)
Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类slice函数根据起始索引和结束索引抽取字符串内容的子字符串(左闭右开区间-1代表最后一个索引位置)