c++ - 如何在 C++ 中从字符串中提取数据
问题描述
注意:我正在使用 C++11 标准
我正在寻找一个处理以下问题的函数:
给定以下输入:a,b,c
我希望它打印a
和b
c
给定:a,b,c,
我希望它打印a
and b
and c
and""
给定:,a
我希望它打印""
和a
鉴于,
它应该打印""
并且在空字符串的情况下它不应该打印任何东西
换句话说,我想提取两个,
加之间的每个值来处理边缘。
我当前的实现是如此的错误,我已经编辑了超过 8 次,因为我总是发现一些边缘情况。
void print(const string &command)
{
string vertex_title = "";
int i = 0;
while (i < command.lengh()) {
if (command[i] == ',') {
if (i==command.lengh()-1) return false;
std::cout<<vertex_title;
vertex_title = "";
i++;
continue;
}
vertex_title += command[i++];
}
注意:我不知道,但也许正则表达式在这里有帮助(我对此一无所知)
解决方案
虽然您可以实现这样的功能,但我强烈建议您使用现有的解决方案。有不少。
我个人习惯absl::StrSplit()
(见https://abseil.io/docs/cpp/guides/strings)默认情况下会做你想做的事。
Thomas Sablik 还在评论中写道:
您可以使用 boost::algorithm::split 或 std::strtok
推荐阅读
- python - Pandas - 用特定组的平均值替换列中的 NaN
- kubernetes - 使用 Istio 将请求路由到外部服务(Webhooks)
- ruby - Ruby-Heroku 如何创建 procfile
- function - 如何在函数中使用泛型并在 rust 中使用模式匹配?
- google-app-engine - 如何通过 Google App engine Flex 将 Google Cloud SQL 连接到僵尸网络核心应用程序?
- ios - 启动 react-native run-ios 时 Native-Module 不能为 Null
- java - 在java中,如何在不同数据类型的数组中创建一个数组
- testing - 将以太坊从账户转移到合约时“耗尽气体”
- kotlin - 我创建类的对象并得到一个错误“线程“主”java.lang.StackOverflowError中的异常”
- c# - C#8.0:具有默认实现的接口的受保护属性