- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过读取一个文件并用替换后的字母输出另一个文件来用 bye 替换 hi。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream myfile;
ofstream output;
output.open("outputfile.txt");
myfile.open("infile.txt");
char letter;
myfile.get(letter);
while (!myfile.eof()) {
if (letter == 'H') {
char z = letter++;
if (z == 'i')
output << "BYE";
}
else output << letter;
}
output.close();
myfile.close();
return 0;
}
我的输出是重复大写的 I's 重复无限次。
这是我的输入文件
Hi
a Hi Hi a
Hi a a Hi
最佳答案
eof
方法返回输入流读取指针的位置,而不是 get
的状态.这更像是告诉你是否get
会成功,所以你可以这样写:
while (!myfile.eof()) {
char letter;
myfile.get(letter);
//...
}
这样,您至少会在每次迭代中得到一个新字母,并且当读取指针到达输入末尾时循环结束。
但是,还有其他情况可能会导致 get
不成功。幸运的是,这些由流本身捕获,由 get
返回.测试流的状态就像将流视为 bool 值一样简单。因此,编写循环的更惯用的方法是:
char letter;
while (myfile.get(letter)) {
//...
}
当您想查看输入中检测到的 'H'
之后的下一个字母时,你执行增量。
char z = letter++;
但是,这并没有达到预期的效果。相反,它只是同时设置 letter
和 z
'H'
的数值后继变量( 'H' + 1
),并且不观察输入流中的下一个字母。
您可以使用另一种方法,例如 get
,但将输入留在输入流中。它叫做peek
.
char z;
auto peek = [&]() -> decltype(myfile) {
if (myfile) z = myfile.peek();
return myfile;
};
if (peek()) {
//...
}
现在,您可以检查 z
的值, 但它仍然被认为是下一个 get
的输入在 letter
.
因此,完整的循环可能如下所示:
char letter;
while (myfile.get(letter)) {
if (letter == 'H') {
char z;
auto peek = [&]() -> decltype(myfile) {
if (myfile) z = myfile.peek();
return myfile;
};
if (peek() && z == 'i') {
myfile.get(z);
output << "BYE";
continue;
}
}
output << letter;
}
通过这种方法,您将能够正确处理像 HHi
这样的麻烦情况。作为输入,或者输入中的最后一个字母是 H
.
关于c++ - 如何在文件中用 Bye 替换 Hi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978731/
我正在使用循环赛来安排比赛。我希望每支球队都打“n”场比赛,而我有“x”支球队。如果“x”是偶数,则一切都很好,但如果“x”是奇数,我必须添加另一个团队,“再见”才能使其正常工作。 当我有 11 支球
我目前正在学习 session 启动协议(protocol)。在那,开始学习 session 发起协议(protocol)的基本调用流程。在研究的同时,在一个来源中提到 BYE 请求方法是逐跳的,但在
我正在写一个 SIP 服务器,我让它接听电话,然后将它们连接到 voip 电话,问题是当你挂断 voip 电话时,转发 BYE 消息有问题,而我的手机没有结束通话。 这是SIP消息日志(我用1234替
这个问题已经有答案了: sizeof() operator in if-statement (5 个回答) 已关闭 5 年前。 请给出输出的原因...为什么在条件 if 语句为 true 时给出“再见
每当我退出 MySQL 时,程序都会打印消息“再见”。 这样做有什么特殊原因吗?例如这样调用 mysql 的脚本就可以猜测程序退出的时间点?或者这只是开发者的一点幽默? 我问这个问题是因为我有一个用例
我正在做一些依赖于 Wi-Fi RAK5206 电子板的 C++ 项目。我正在使用 ffmpeg 库来获取视频和音频流,我遇到了可以启动和停止流四次的问题,但是当我想启动第五次时,我得到了错误。错误描
这个问题已经有答案了: strange output in comparison of float with float literal (8 个回答) Floating point comparis
我想通过读取一个文件并用替换后的字母输出另一个文件来用 bye 替换 hi。 #include #include using namespace std; int main() { ifs
您好,我有两个问题, 1-) 当我发送 sip INVITE 消息并收到大于 2xx 的错误时,如果我发送 BYE 消息,这样做是否合理?服务器会回复 BYE 消息吗? 2-) 将对所有 2xx 状态
标题是尝试运行名为 l2fwd 的 dpdk 示例应用程序时出现的错误的最后一行。当我通过 ./build/l2fwd -l 0-3 -n 4 -- -q 8 -p ffff 运行应用程序时,但最后几
我有一些代码如下: # My code here turtle.bye() 在那之后,有什么办法可以重新打开 turtle 窗口。我知道您可以执行 turtle.clearscreen() 但这不会关
经过数周的梦幻般的表演,我们的 Asterisk 前几天失控了。 我查看了我们服务器的日志,确实报告在某些时候失去了与 Asterisk 通信的能力(我们正在使用 Java API): org.ast
我正在尝试在 CentOS 7 开发计算机上安装 JavaMail,仅使用 localhost 来发送电子邮件。为此,我安装了 dovecot、postfix 和 mailx。我刚刚使用 the in
所以我在我的一些自定义 VOIP 应用程序中使用 JAIN-SIP API 进行调用设置,我遇到了一个困扰我好几天的问题:我无法挂断带有 BYE 消息的调用。更准确地说,我不断收到来自被叫方的 481
我在 Mobicents restcomm-android-sdk 中尝试了 jainsip 示例。它对我有用,但我无法从客户端正确创建再见消息。 I created a Bye Message cl
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
让我先描述一下我的问题。我将 Sofia SIP 用于电话应用程序,而我使用的 SIP 代理位于 NAT 后面。这意味着来自代理的传入邀请将内部代理 IP(例如 10.0.0.1)作为 Contact
我有一个 java 方法,其参数之一是二维字节数组 (byte[][])。我想从 RPG 中调用这个方法。我知道它适用于一维字节数组,例如通过将 RPG 中的参数声明为 nA,其中 n 是数组的长度,
我有 .bat 文件。看起来像下一个 ....many commands1 ftp -i -s:copy.txt ...many commands2 copy.txt 包含下一个命令 open ...
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我是一名优秀的程序员,十分优秀!