控制台输出wstring
wcout.imbue(locale(""));
wcout << wstrName;
1. cin遇到空格,回车就会结束,如果输入中有空格,使用
string input;
getline(cin, input, '\n'); //fflush(stdin); 如果不阻塞 //vs2019(C++ 11之后)使用rewind(stdin); 代替
如果要能够接受换行,如下: 使用ctrl + z结束输入(windows下ctrl+z,然后回车确定)
string strPerLine;
while(getline(cin, strPerLine))
{
justify.m_vecSrcLine.push_back(strPerLine);
}
2文件操作的各种方法
fin.peek() != EOF 多读一行 空行,是因为文件的末尾有一个换行符
在保存文件的时候,如果是最后一条记录,则不要写入换行,否则读取的时候,就会多一个空行
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
bool CClass::LoadData(){
try{
std::ifstream infile("student.txt");
infile >> m_iStuNum;
for(int i=0;i < m_iStuNum;i++)
{
infile>>pArrStudent[i]->m_szIdNo;
infile>>pArrStudent[i]->m_szName;
infile>>pArrStudent[i]->m_szAddr;
infile>>pArrStudent[i]->m_szTel;
infile>>pArrStudent[i]->m_iStudNo;
infile>>pArrStudent[i]->m_iMath;
infile>>pArrStudent[i]->m_iEnglish;
}
infile.close();
}
catch(...){
}
return true;
}
bool CClass::SaveData(){
std::ofstream outfile("student.txt");
outfile << m_iStuNum << std::endl;
for(int i=0;i<m_iStuNum;i++)
{
outfile<<pArrStudent[i]->m_szIdNo<<"\t"<<
pArrStudent[i]->m_szName<<"\t"<<
pArrStudent[i]->m_szAddr<<"\t"<<
pArrStudent[i]->m_szTel<<"\t"<<
pArrStudent[i]->m_iStudNo<<"\t"<<
pArrStudent[i]->m_iMath<<"\t"<<
pArrStudent[i]->m_iEnglish<<std::endl;
}
outfile.close();
return true;
}
类型转换
template <class Type>
Type StringToNum(const string& str)
{
istringstream iss(str);
Type num;
iss >> num;
return num;
}
template <class Type>
string NumToString(Type t)
{
ostringstream iss;
iss << t;
return iss.str();
}
逐行读取文件,判断文件结束
ifstream dataFile;
dataFile.open(strDataFile.c_str(), ios::in | ios::binary);
while (!dataFile.eof()) {
getline(dataFile, strPerLine);
}
获取文件夹下的所有文件名
#include<io.h>
bool GetFiles( string path, vector<string>& files )
{
long hFile = 0;
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
GetFiles( p.assign(path).append("\\").append(fileinfo.name), files );
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
return true;
}
Split
void Split(const std::string& s, std::vector<std::string>& v, const std::string& c)
{
std::string::size_type pos1, pos2;
size_t len = s.length();
pos2 = s.find(c);
pos1 = 0;
while(std::string::npos != pos2)
{
v.emplace_back(s.substr(pos1, pos2-pos1));
pos1 = pos2 + c.size();
pos2 = s.find(c, pos1);
}
if(pos1 != len)
v.emplace_back(s.substr(pos1));
}