gpt4 book ai didi

C++ 菜鸟(流)...如何从字符串有空格的文件中读取字符串(例如,Tom Smith)?使用 getline 而不是 >> 时遇到问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:55 32 4
gpt4 key购买 nike

我编写了一个模板函数,用于从文件中读取字符串或数字数据,并将数据保存在字符串或整数/ double 的 vector 中。然后我使用这些数据与我编写的另一个代码一起执行计算。

提前致歉,因为我认为这是一个简单的问题...我无法读取有空格的字符串数据...例如,名字和姓氏。当我想要“Tom Smith”时,我只会得到“Tom”)。通过谷歌搜索,问题似乎出在 >> 而我应该改用 getline。我尝试用 getline(test,100) 替换 >>,但我收到“没有匹配函数调用 std::basic_istringstream...”类型错误(错误:没有匹配函数调用 'std::basic_ifstream >::getline(double&)')

如果有人能纠正我,我将不胜感激!我似乎无法理解流!

这是一些示例数据和我的代码。我在这里为字符串配置了它。

labelInFile//一个 vector 数据子集的标识符

'Tom Smith' 'Jackie Brown' 'John Doe'//这些名字应该作为 vector 中的元素结束

#include <algorithm>  
#include <cctype>
#include <istream>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

using namespace std;

template<typename T>
void fileRead( std::vector<T>& results, const std::string& theFile, const std::string& findMe, T& test )
{
std::ifstream file( theFile.c_str() );
std::string line;

while( std::getline( file, line ) )
{
if( line == findMe )
{
do{
std::getline( file, line, '\'' );
std::getline( file, line, '\'');

std::istringstream myStream( line );

myStream >> test;
results.push_back( test );
}
while ( file.get() != '\n' );
}
}
}


int main ()
{
const std::string theFile = "test.txt"; // Path to file
const std::string findMe = "labelInFile";
std::string test;

std::vector<string> results;

fileRead<std::string>( results, theFile, findMe, test );

cout << "Result: \n";
std::copy(results.begin(), results.end(), std::ostream_iterator<string>(std::cout, "\n"));

return 0;
}

最佳答案

我已经编写了一些代码来解决您的部分问题:解析名称。您可以根据自己的需要进行调整。注意:这不是解决此问题的最快方法,但它是一种希望易于理解的简单方法。

测试.cpp

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <vector>

int main()
{
const char szFname[] = "Test.dat";
std::vector<std::string> vData;

std::ifstream ifstr(szFname);

while (ifstr.good())
{
// find first quote
ifstr.ignore(0xffff, '\'');
std::string sData;
char ch;
while (ifstr.good() && ('\'' != (ch=ifstr.get())))
sData += ch;
if (!sData.empty())
vData.push_back(sData);
}
for (size_t i=0; i<vData.size(); ++i)
std::cout << vData[i] << std::endl;

return 0;
}

测试.dat

'Tom Smith' 'Jackie Brown' 'John Doe' 
'Robert Burns' 'James Joyce''Joseph Conrad' 'Dylan Thomas'
'Edgar Allan Poe' 'V.S. Naipaul' 'Vladimir Nabokov'
'William Shakespeare' 'William Langland' 'Robert Greene'

结果

Tom Smith
Jackie Brown
John Doe
Robert Burns
James Joyce
Joseph Conrad
Dylan Thomas
Edgar Allan Poe
V.S. Naipaul
Vladimir Nabokov
William Shakespeare
William Langland
Robert Greene

关于C++ 菜鸟(流)...如何从字符串有空格的文件中读取字符串(例如,Tom Smith)?使用 getline 而不是 >> 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361346/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com