Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;_C++ - Fatal编程技术网

C++ c++;

C++ c++;,c++,C++,我试图拉出firstName字符串,但是我得到了非常奇怪的输出 样本数据: 75428马斯顿,爱德华 想要的输出: 马斯顿爱德华75428 输出接收: 埃德瓦州马斯顿爱德华75428 代码: ifstream文本文件(“NameZip.txt”)//文件初始值设定项 int计数器=0//用于将数据循环到struct[]implementData中。由于我们知道该文件将有20行长,因此避免使用更长、更需要内存的替代方案 int tmpZip; 串tmpString; 个人数据[20]//为结构创建

我试图拉出firstName字符串,但是我得到了非常奇怪的输出

样本数据: 75428马斯顿,爱德华

想要的输出: 马斯顿爱德华75428

输出接收: 埃德瓦州马斯顿爱德华75428

代码:

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));