我知道有几个相关的问题,例如解析逗号分隔的std :: string。然而,我创建了一段代码,符合我的特定需求-将从文件中读取的字符串在逗号处拆分并剥离任何空格。稍后,我想将这些子字符串转换为
所以程序是这样的。while循环搜索
double
并存储在std :: vector
中。不是所有操作都显示。这是我提供的代码。include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
int main()
{
std::string str1 = " 0.2345, 7.9 \n", str2;
str1.erase(remove_if(str1.begin(), str1.end(), isspace), str1.end()); //remove whitespaces
std::string::size_type pos_begin = { 0 }, pos_end = { 0 };
while (str1.find_first_of(",", pos_end) != std::string::npos)
{
pos_end = str1.find_first_of(",", pos_begin);
str2 = str1.substr(pos_begin, pos_end- pos_begin);
std::cout << str2 << std::endl;
pos_begin = pos_end+1;
}
}
输出:
0.2345
7.9
所以程序是这样的。while循环搜索
,
的出现,pos_end
将存储第一个,
的出现,str2
将成为子字符串,pos_begin
将移动到pos_end
后一位。第一次迭代将正常运行。
在下一次迭代中,pos_end
将是非常大的值,我不确定pos_end - pos_begin
会是什么。同样的情况也适用于pos_begin
(尽管它将不被使用)。要进行一些检查,例如
if (pos_end == std::string::npos)
pos_end = str1.length();
还有进一步改进的余地吗?
这个程序确实可以运行 (g++ -Wall -Wextra prog.cpp -o prog -std=c++11
)。这种做法正确吗?
std::istringstream
和std::getline()
怎么样? - user9212993pos_end
很大,这不是问题。 - supervector <double> v1
。你打算如何处理空令牌?例如:", 0.2345, 7.9 \n" - user4581301