64,648
社区成员
发帖
与我相关
我的任务
分享
wchar_t* s = L"He \
llo";
L"\"\\\"\\"
#include <iostream>
#include <fstream>
void convert(std::ifstream & ifs, std::ofstream & ofs)
{
const int MAX_BUFF_SIZE = 4096;
char buffer[MAX_BUFF_SIZE];
bool in_string = false; // 当前处理字符是否被一对""包含
bool has_l_mark = false; // 当前处理字符是否被一对""包含, 而且是L""
char last_char = '\0'; // 记录上一个处理的字符
while (!ifs.eof())
{
ifs.getline(buffer, MAX_BUFF_SIZE);
for (int i = 0; i < ifs.gcount(); ++i)
{
char current_char = buffer[i];
if ('\0' == current_char)
{
current_char = '\n';
}
if (in_string)
{
ofs << current_char;
if ('\"' == current_char && '\\' != last_char)
{
if (has_l_mark)
{
ofs << ')';
}
in_string = false;
has_l_mark = false;
}
}
else
{
if ('\"' == current_char)
{
if ('\\' != last_char)
{
in_string = true;
}
if ('L' == last_char)
{
long pos = ofs.tellp();
ofs.seekp(pos - 1);
ofs << "_X(";
has_l_mark = true;
}
}
ofs << current_char;
}
last_char = current_char;
}
}
}
int main(int argc, char * argv[])
{
std::ifstream ifs("L.cpp", std::ios::in);
if (!ifs.is_open())
{
return(1);
}
std::ofstream ofs("X.cpp", std::ios::out | std::ios::trunc);
if (!ofs.is_open())
{
return(2);
}
convert(ifs, ofs);
ifs.close();
ofs.close();
return(0);
}
测试文件: L.cpp
#include <iostream>
int main(int argc, char * argv[])
{
const wchar_t * const p1 = L"abc";
const wchar_t * const p2 =L"abc";
const char * const p3 = "abc";
const wchar_t * const p4 = L"L";
const wchar_t * const p5 = L"abc\"Labc";
const wchar_t * const p6 = L"abc\"L\"abc";
const wchar_t * const p7 = L"abc\" L\"abc";
const char * const p8 = "abc\"Labc";
const char * const p9 = "abc\"L\"abc";
const char * const p10 = "abc\" L\"abc";
const char * const p11 = ("abcL", "");
return(0);
}
结果文件: X.cpp
#include <iostream>
int main(int argc, char * argv[])
{
const wchar_t * const p1 = _X("abc");
const wchar_t * const p2 =_X("abc");
const char * const p3 = "abc";
const wchar_t * const p4 = _X("L");
const wchar_t * const p5 = _X("abc\"Labc");
const wchar_t * const p6 = _X("abc\"L\"abc");
const wchar_t * const p7 = _X("abc\" L\"abc");
const char * const p8 = "abc\"Labc";
const char * const p9 = "abc\"L\"abc";
const char * const p10 = "abc\" L\"abc";
const char * const p11 = ("abcL", "");
return(0);
}
当前代码不足:
处理不了如下情形:
const wchar_t * p12 = L"abc" L"abc";
const wchar_t * p13 = L"abc" "abc";
const wchar_t * p14 = L"abc" "abc"
"abc";
const wchar_t * p14 = L"abc" "abc"
L"abc";
。。。。
诸如此类的情形