我正在用C ++创建一个程序,它接受pdf并将其转换为epub。我的功能有问题,读取章节并为每章创建不同的文件。输入文件将如下所示:
第1章
blah blah blah ..... blah第2章
blah blah blah ..... blah
我正在尝试使用for循环检查字符串的开头,如果是,则在正确的目录中创建一个名为“chapter#.xhtml”的xhtml文件。我遇到的问题是检查文本并创建相应的文件。
for(int i=1;i<chapters;i++){
char j = i;
string chap = "book/OEBPS/chapters/chapter";
chap.append(1,j).append(".xhtml");
if(line == "Chapter "+j){
out << "</div>\n</body>\n</html>";
out.close();
out.open(chap.c_str());
break;
}
}
基本上我正在尝试创建一个计数器,该计数器既可以是字符串,也可以添加到字符串中以在if语句条件和out.open参数中使用。 以下是整个功能以防万一。
void readChapters(ofstream& out,int chapters){
string line,file;
char letter;
ifstream in;
cout << "Enter input file\n";
cin >> file;
in.open(file.c_str());
out.open("junk");
getline(in,line);
while(in) {
for(int i=1;i<chapters;i++){
char j = i;
string chap = "book/OEBPS/chapters/chapter";
chap.append(1,j).append(".xhtml");
if(line == "Chapter "+j){
out << "</div>\n</body>\n</html>";
out.close();
out.open(chap.c_str());
break;
}
}
getline(in,line);
if(line == "\n")
getline(in,line);
out << line << "\n</p>\n<p>\n";
}
out << "</div>\n</body>\n</html>";
out.close();
remove("junk");
}
答案 0 :(得分:1)
此行不符合您的要求:
char j = i;
至多,完全可怕:
char j = '0' + i;
但我建议你使用ostringstream:
std::ostringstream ostr;
ostr << "Chapter " << i;
std::string chap = ostr.str();
注:
不
for(int i=1;i<chapters;i++)
可是:
for(int i=1;i<=chapters;i++)
^
|
答案 1 :(得分:1)
if(line == "Chapter "+j){
"Chapter "
是一个字符串文字,而不是std::string
,因此"Chapter "+j
会将j
添加到指向const char*
的{{1}}指针。例如,如果"Chapter "
,则添加结果为j == 1
。您应该明确地将其转换为"hapter "
,以及std::string
:
j
在C ++ 14中,您可以使用if (line == std::string("Chapter ") + std::to_string(j)) {
文字:
std::string