gpt4 book ai didi

c++ - 如何用文本文件中的另一个数字替换特定数字 (C++)

转载 作者:行者123 更新时间:2023-11-30 04:45:49 26 4
gpt4 key购买 nike

首先,我想说明一下,我是 C++ 的新手,所以我可能忽略了任何明显的解决方案。

我的任务是用 1 替换任何非零数。

文件看起来像这样:

Some text    
0;0;0;0;0;0.236223;0;0;0;0;0;0.312757;0;0;0;0;0;0;0;0;0;0.367119;... (multiple lines)

应该变成:

Some text
0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1,... (multiple lines)

我的想法是从字符串替换代码开始。我尝试了以下方法:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{

ifstream filein( "input.txt" );
ofstream fileout( "output.txt" );

string toreplace = "0";
string replacewith = "1";

string text;
while ( getline( filein, text ) )
{

for ( size_t p = text.find( toreplace ); p != string::npos;
p = text.find( toreplace , p ) )
text.replace( p, toreplace.length(), replacewith );

fileout << text << endl;
}

return 0;
}

这回馈:

1;1;1;1;1;1.236223;1;1;1;1;1;1.312757;1;1;1;1;1;1;1;1;1;1.367119,...
  • 这与我想要的相反(不完全)。所以,我认为将 toreplacereplacewith 声明为 float 并使用 != 0 会很容易,但这是行不通的,尤其是因为我不能将 text 定义为 float,因为它包含“;”。 (我需要删除这个分隔符吗?我在最终的文本文件中仍然需要它。)

  • 该代码中的另一个问题是它替换了每个零,其中包括“0.236223”变成“1.236223”。我认为这在最终使用 float 而不是字符串时无关紧要。

这是完成给定任务的正确方法,还是换一种方法更好?感谢您提供的任何帮助。

编辑:有一个“;”在每一行的末尾,这是我不想要的,并使用 string::pop_back() 函数来解决问题。

最佳答案

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{

ifstream filein("input.txt");
ofstream fileout("output.txt");

string toreplace = "0";
string replacewith = "1";

string text, new_text="";
while (getline(filein, text))
{
new_text = "";
double num;

while (sscanf_s(text.c_str(), "%lf;", &num))
{
if (num)
new_text += "1;";
else
new_text += "0;";

while (text.length() && text.at(0) != ';')
{
text.erase(0,1);
}

text.erase(0,1);

if (text.empty())
break;
}

fileout << new_text << endl;
}

return 0;
}

关于c++ - 如何用文本文件中的另一个数字替换特定数字 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57056415/

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