【发布时间】:2016-03-31 08:55:12
【问题描述】:
注意:我是一个 C++ 菜鸟。
我有以下问题:
我从一个文件中读取并想用其他字符串部分替换字符串部分。简单的任务,应该很容易做到。我用 setmode 做了一些实验,但没有成功。我也用谷歌搜索过,但它也没有帮助我。
可能存在轻微的代码问题,但请关注问题。转换测试数据如下:
int main(int argc, char** argv) {
stringstream strs;
//Choose output file
ofstream ofile;
string filename;
cout << "Ausgabepfad eingeben" << endl;
cin >> filename;
ofile.open(&filename[0]);
//Choose input file
ifstream ifile;
cout << "Quellpfad eingeben" << endl;
cin >> filename;
ifile.open(&filename[0]);
//Choose decoding - doesnt work, I know - That was for experiments
int mode = 0;
cout << "Decoding wählen\n1 für _O_TEXT\n2 für _O_BINARY\n3 für _O_U16TEXT\n4 für _O_U8TEXT\n5 für _O_WTEXT" << endl;
cin >> mode;
/* switch(mode){
case 1:
_setmode (_fileno(ifstream), _O_TEXT);
break;
case 2:
_setmode (_fileno(ifstream), _O_BINARY);
break;
case 3:
_setmode (_fileno(ifstream), _O_U16TEXT);
break;
case 4:
_setmode (_fileno(ifstream), _O_U8TEXT);
break;
case 5:
_setmode (_fileno(ifstream), _O_WTEXT);
break;
default:
cerr << "ungültige Codierung gewählt"
}
*/
//Choose search string and replacement string
ifile.seekg(0); //not necessary, I know
string searchstr = "";
cout << "Suchstring eingeben" << endl;
cin >> searchstr;
string fillstr;
cout << "Ersetzungsstring eingeben" << endl;
cin >> fillstr;
cout << fillstr;
int marker = 0;
if(searchstr.length()<1){
return 0;
}
//actual program
while(!ifile.eof()){
int counter = 0;
ifile.seekg(marker);
char current = ifile.get();
if(current==searchstr[0]){ //if the first search letter matches, seet, if the others do.
marker++;
counter++;
for(int i = 1; i < searchstr.length(); i++){
ifile.seekg(marker);
if(ifile.get()==searchstr[i]){
counter++;
marker++;
}else{
marker-i;
break;
}
}
if(counter == searchstr.length()){
ofile << fillstr;
cout << endl;
}
}else{
ofile << ifile.get();
cout << ifile.get();
}
marker++;
}
ifile.close();
ofile.close();
cout << endl;
return 1;
}
以下字符串
|-
应该替换为
\n
文本(示例)是:
|[[Allgemeines Deutsches Kommersbuch:1|1]]
|1
|[[Abend wird's, des Tages (Körner)]]
|[[Die Eichen (Körner)]]
|-
|[[Allgemeines Deutsches Kommersbuch:2|2]]
|2
程序运行,但它不起作用。输出是很多没有任何意义的数字。
【问题讨论】:
-
marker-i;看起来不对。 -
见标准编解码器。另外,看看 wchar_t、wcin、wcout 等。
-
marker - i是对的。我匹配并通过标记++(i 为 1)转到下一个字母,如果字母匹配,我会更进一步,如果不匹配,i会后退。最后我去marker++。如果没有marker-i,||-将被跳过。 -
输出应该是什么?我无法理解其中的逻辑。