I am aware of several related questions, such as Parsing a comma-delimited std::string one. However, I have created a code that fits my specific need - to split the string (read from a file) at comma stripping any whitespaces. Later I want to convert these substrings to double
and store in std::vector
. Not all operations are shown. Here is the code I am giving.
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;
}
}
Output:
0.2345
7.9
So the program goes like this. While loop searches for occurrence of ,
pos_end
will store first occurrence of ,
, str2
will be a substring, pos_begin
will go to one next to pos_end
. First iteration will run fine.
In the next iteration, pos_end
will be very large value and I am not sure what pos_end- pos_begin
will be. Same goes with pos_begin
(though it will be unused). Is making some checks, such as
if (pos_end == std::string::npos)
pos_end = str1.length();
a way to go?
The program works on though (g++ -Wall -Wextra prog.cpp -o prog -std=c++11
). Is this approach correct?