c++ - 字符串不会在拆分时更新其值
问题描述
我有一个接收坐标作为字符串“1.12 1.28”的函数。我必须拆分字符串并将两个值都分配给浮点变量(x = 1.12 和 y = 1.28)。问题是,当我拆分字符串以分隔值时,它会停止为字符串分配新值。
当我运行下面的代码时,它会打印整个字符串并在每次迭代时更新。
void print_coordinates(string msg, char delim[2])
{
cout << msg;
cout << "\n";
}
int main()
{
SerialIO s("/dev/cu.usbmodem1441");
while(true) {
print_coordinates(s.read(), " ");
}
return 0;
}
输出:
1.2 1.4
1.6 1.8
3.2 1.2
但是当我运行下面的代码时,它会停止更新字符串。
void print_coordinates(string msg, char delim[2])
{
float x = 0;
float y = 0;
vector<string> result;
boost::split(result, msg, boost::is_any_of(delim));
x = strtof((result[0]).c_str(), 0);
y = strtof((result[1]).c_str(), 0);
cout << x;
cout << " ";
cout << y;
cout << "\n";
}
int main()
{
SerialIO s("/dev/cu.usbmodem1441");
while(true) {
print_coordinates(s.read(), " ");
}
return 0;
}
输出:
1.2 1.4
1.2 1.4
1.2 1.4
解决方案
如果你想使用 boost,你可以使用boost::tokenizer。
但是您不需要使用 Boost 来分隔字符串。如果您的分隔符是空白字符" "
,您可以简单地使用 std::stringsstream。
void print_coordinates(std::string msg)
{
std::istringstream iss(msg);
float x = 0;
float y = 0;
iss >> x >> y;
std::cout << "x = " << x << ", y = " << y << std::endl;
}
如果你想指定你的分隔符
void print_coordinates(std::string msg, char delim)
{
std::istringstream iss(msg);
std::vector<float> coordinates;
for(std::string field; std::getline(iss, field, delim); )
{
coordinates.push_back(::atof(field.c_str()));
}
std::cout << "x = " << coordinates[0] << ", y = " << coordinates[1] << std::endl;
}
推荐阅读
- android - Google Play 商店开发者帐户活动日志会显示上传记录和关键更改吗?
- node.js - 如何在 Node 中管理对 Postgresql 的大量调用
- reactjs - 如何在打字稿中正确使用区分联合,因此当一个属性为真时,需要另外两个属性
- arrays - 为什么 AbstractArray 的子类型会导致 Julia 中的矩阵运算不精确?
- amazon-web-services - API 网关 SQS 响应以 UnknownOperationException 结束
- android - 如何从布局创建位图并增加大小?
- reactjs - 在节点打开的情况下反应树组件
- python - 多维 numpy 数组中矩阵向量乘积的快速迭代
- python-2.7 - conda 构建失败并显示 need_source_download 消息
- node.js - 即使从后端重定向后页面也不会刷新