gpt4 book ai didi

c++ - 从文件 (ifstream) 读取并写入文件 (ofstream) - 编码问题

转载 作者:行者123 更新时间:2023-11-28 05:45:23 25 4
gpt4 key购买 nike

注意:我是一个c++菜鸟。

我有以下问题:

我从一个文件中读取并想用其他字符串部分替换字符串部分。简单的任务,应该很容易做。我用 setmode 做了一些实验,但没有成功。我也在谷歌上搜索了 imbue,但它也没有帮助我。

可能存在一些小的代码问题,但请关注问题所在。转换测试数据如下:

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

程序运行,但不工作。输出是很多没有任何意义的数字。

最佳答案

The output is lots of numbers without any sense.

来电ifile.get()返回 int_type 类型的值.因此 <<输出所有这些整数值。

替换

ofile << ifile.get();

(进行整数的格式化输出)

ofile << char( ifile.get() );

或(首选,使用未格式化的输入输出)

ofile.put( ifile.get() );

关于c++ - 从文件 (ifstream) 读取并写入文件 (ofstream) - 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com