我由于需要将某一文件的空行删掉,反正闲着无聊,就准备自己写个代码实现。本来应该就那么几行就可以解决的,结果却发现是乱码。然后,本来几分钟就ok的事,我花了一整个下午的时间才解决。果然写代码才是最好的消磨时间的方法。
解决方案一:把要改的文件另存为ANSI编码就不会乱码。
解决方案二:
string UTF8ToANSI(const char *str)
{
string res;
wchar_t *src;//宽字符类型
LPSTR lpres;//LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针
//执行转换的多字节字符所使用的字符集为UTF8,0表示不使用位标记,待转换的字符串为str,\
设置-1会自动判断待转换字符串的长度 ,被转换字符串的缓冲区,0表示函数不执行转换
//函数执行成功返回待转换字符串的缓冲区所需求的宽字符数大小
int tmp = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
src=new wchar_t[tmp+5];
//函数执行成功返回向缓冲区中写入的宽字符数
MultiByteToWideChar(CP_UTF8, 0, str, -1, src, tmp);
//ANSI编码,。。。,后两个参数可以忽略掉,就用NULL就好
tmp = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL);
lpres=new char[tmp+5];
WideCharToMultiByte(CP_ACP, 0, src, -1, lpres, tmp, NULL, NULL);
res=lpres;
delete []src;
delete []lpres;
return res;
}
所以说,还是改文件编码格式要简单的多。
加个彩蛋,使用scanf读取一整行的方法
scanf("%[^\n]",&str[0]);
所以说scanf可以用正则?