在 C++ 中拆分没有空格的字符串
Splitting a string with no spaces in C++
我有一个由键值对组成但没有分隔符的字符串:
A0X3Y21.0
所有值都可以是浮点数。如何将此字符串拆分为:
A = 0, X = 3, Y = 21.0
我目前的方法是使用 strtof() ,除了一个烦人的情况外,它通常有效,其中 0 在 X 之前,因此上面的字符串被拆分为:
A = 0x3, Y = 21.0
对于解析,通常我使用std::stringstream
s,在header <sstream>
中定义。此处使用示例:
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::stringstream parser("A0X3Y21.0");
std::stringstream output;
char letter;
double value;
while (parser>>letter&&parser>>value) {
output << letter;
output << " = ";
output << value;
output << " ";
}
std::cout<<output.str();
}
这将输出:
A = 0 X = 3 Y = 21
假设你只需要打印这些,你甚至不必使用strtof
,你只需要找到浮点字符串的开始和结束。这是一个演示此功能的函数(此函数假定字符串中变量名称的长度仅为一个字符,因为从您的示例开始,但如果需要,修复它并不难):
#include <iostream>
#include <string>
#include <string_view>
void foo(const std::string_view str)
{
for (size_t i = 0; i < str.size(); ++i)
{
std::cout << str[i] << " = ";
size_t float_end_pos = str.find_first_not_of("1234567890.", i + 1) - 1;
std::string_view float_str = str.substr(i + 1, float_end_pos - i);
std::cout << float_str << '\n';
i = float_end_pos;
}
}
int main()
{
foo("A0X3Y21.0");
}
输出:
A = 0
X = 3
Y = 21.0
并且根据您需要做的任何事情来调整这个基本前提应该不会太难。
我有一个由键值对组成但没有分隔符的字符串:
A0X3Y21.0
所有值都可以是浮点数。如何将此字符串拆分为:
A = 0, X = 3, Y = 21.0
我目前的方法是使用 strtof() ,除了一个烦人的情况外,它通常有效,其中 0 在 X 之前,因此上面的字符串被拆分为:
A = 0x3, Y = 21.0
对于解析,通常我使用std::stringstream
s,在header <sstream>
中定义。此处使用示例:
#include <sstream>
#include <string>
#include <iostream>
int main() {
std::stringstream parser("A0X3Y21.0");
std::stringstream output;
char letter;
double value;
while (parser>>letter&&parser>>value) {
output << letter;
output << " = ";
output << value;
output << " ";
}
std::cout<<output.str();
}
这将输出:
A = 0 X = 3 Y = 21
假设你只需要打印这些,你甚至不必使用strtof
,你只需要找到浮点字符串的开始和结束。这是一个演示此功能的函数(此函数假定字符串中变量名称的长度仅为一个字符,因为从您的示例开始,但如果需要,修复它并不难):
#include <iostream>
#include <string>
#include <string_view>
void foo(const std::string_view str)
{
for (size_t i = 0; i < str.size(); ++i)
{
std::cout << str[i] << " = ";
size_t float_end_pos = str.find_first_not_of("1234567890.", i + 1) - 1;
std::string_view float_str = str.substr(i + 1, float_end_pos - i);
std::cout << float_str << '\n';
i = float_end_pos;
}
}
int main()
{
foo("A0X3Y21.0");
}
输出:
A = 0
X = 3
Y = 21.0
并且根据您需要做的任何事情来调整这个基本前提应该不会太难。