C++ c++;
我试图拉出firstName字符串,但是我得到了非常奇怪的输出 样本数据: 75428马斯顿,爱德华 想要的输出: 马斯顿爱德华75428 输出接收: 埃德瓦州马斯顿爱德华75428 代码:C++ c++;,c++,C++,我试图拉出firstName字符串,但是我得到了非常奇怪的输出 样本数据: 75428马斯顿,爱德华 想要的输出: 马斯顿爱德华75428 输出接收: 埃德瓦州马斯顿爱德华75428 代码: ifstream文本文件(“NameZip.txt”)//文件初始值设定项 int计数器=0//用于将数据循环到struct[]implementData中。由于我们知道该文件将有20行长,因此避免使用更长、更需要内存的替代方案 int tmpZip; 串tmpString; 个人数据[20]//为结构创建
ifstream文本文件(“NameZip.txt”)//文件初始值设定项
int计数器=0//用于将数据循环到struct[]implementData中。由于我们知道该文件将有20行长,因此避免使用更长、更需要内存的替代方案
int tmpZip;
串tmpString;
个人数据[20]//为结构创建对象
if(textFile.is_open())//检查以确保文件存在于同一文件夹中以避免错误
{while(getline(textFile,tmpString))
{
stringstream转换(tmpString.substr(0,6));
convert>>tmpZip;//拉出Zipcode
string firstName=tmpString.substr(tmpString.find(“”+1,tmpString.find(“”);//提取名字
字符串lastName=tmpString.substr(tmpString.find(“,”)+2);//提取姓氏
implementData[counter++]={tmpZip,firstName,lastName};//在personData结构中为该选项卡设置值
}}否则
不能使用助推精神:
#include <boost/spirit/home/x3.hpp>
#include <boost/fusion/adapted/std_tuple.hpp>
#include <iostream>
#include <string>
#include <vector>
int main(int argc, char** argv)
{
std::string const str{"75428 Marston, Edward"};
std::tuple<int, std::string, std::string> data;
using namespace boost::spirit::x3;
auto beg = std::begin(str), end(std::end(str));
auto ret = parse(beg, end, int_ >> ' ' >> +~char_(',') >> ", " >> +char_ >> (eol | eoi), data);
if(ret && (beg==end) )
std::cout << "Parse done : " << std::get<0>(data) << " " << std::get<1>(data) << " " << std::get<2>(data) << "\n";
else
std::cout << "Parse failed : '" << std::string(beg, std::next(beg, 5) ) << "'\n";
return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
字符串常量str{“75428 Marston,Edward”};
std::元组数据;
使用名称空间boost::spirit::x3;
自动beg=std::begin(str),end(std::end(str));
auto ret=parse(beg,end,int_>>'>+~char(',')>>,“>>+char_>>(eol | eoi),数据);
如果(ret&(beg==结束))
std::cout提取名字时出错。您正在使用:
string firstName = tmpString.substr(tmpString.find(" ") +1,tmpString.find(","));
第二个参数不正确。第二个参数是计数--要提取的字符数。它不是结束位置。请参阅
将该行更改为:
auto start = tmpString.find(" ") + 1;
auto end = tmpString.find(",");
string firstName = tmpString.substr(start, (end-start));
使用此引用拆分字符串:
auto start = tmpString.find(" ") + 1;
auto end = tmpString.find(",");
string firstName = tmpString.substr(start, (end-start));