C rookie(streams)…如何从字符串中有空格的文件中读取字符串(例
发布时间:2020-12-16 06:55:59 所属栏目:百科 来源:网络整理
导读:我写了一个模板函数,用于从文件中读取字符串或数字数据,并将数据保存在字符串或整数/双精度的向量中.然后我使用数据用我写的另一个代码执行计算. 提前道歉,因为我认为这是一个简单的问题…我无法在字符串数据中读取有空格的内容…例如,名字和姓氏.当我想要“
我写了一个模板函数,用于从文件中读取字符串或数字数据,并将数据保存在字符串或整数/双精度的向量中.然后我使用数据用我写的另一个代码执行计算.
提前道歉,因为我认为这是一个简单的问题…我无法在字符串数据中读取有空格的内容…例如,名字和姓氏.当我想要“汤姆史密斯”时,我只能得到“汤姆”.从谷歌搜索,似乎问题是>>我应该使用getline代替.我试过替换>>使用getline(test,100),但我得到一个“没有匹配函数来调用std :: basic_istringstream …”类型错误(错误:没有匹配函数用于调用’std :: basic_ifstream> :: getline (双&安培;)’) 如果有人能说得对我,我将非常感激!我似乎无法绕过溪流! 这是一些示例数据和我的代码.我在这里为它配置了字符串. labelInFile //一个向量的数据子集的标识符 ‘汤姆史密斯”杰基布朗”约翰多伊’//这些名字应该最终成为矢量中的元素 #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,'''); 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; } 解决方法
我编写了一些代码来解决你的部分问题:解析名称.您可以根据自己的需求进行调整.注意:这不是解决此问题的最快方法,但这是一种希望易于理解的简单方法.
TEST.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; } TEST.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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |