gpt4 book ai didi

c++ - .size() 字符串操作不读取字符的实际长度/大小 c++

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:48 25 4
gpt4 key购买 nike

我正在尝试从文件中读取一篇文章,然后我需要将句子的每个开头字母更改为大写字母,然后将更正后的文章发送回名为 correct.txt 的文件。文章存储在 essay.txt 中。

到目前为止,我只是在了解从文件到字符串的转换,以便我继续解决问题的其余部分。到目前为止,我有一个字符串变量,它保存由一个空格分隔的单词的文章。我注意到,当我尝试使用新字符串的大小时,它没有给我正确的答案,我也不知道为什么。如果您对我如何让它注意到正确数量的字符有任何建议,我将不胜感激。

还有一个问题,我知道继续前进,为了将句子的开头字母改为大写,我需要先找到句点。一旦我有了这个位置,我就可以对需要变成大写的字符使用 pos+2 (包括句点后面的前面的空格)。这是解决此问题的正确方法吗?对于如何推进此操作,您还有其他建议吗?

到目前为止,这是我的代码:

    #include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

int main(){

//declaring variables and creating objects
ifstream inputFile;
ofstream outputFile;
char inputFileName[20], outFileName[20];

cout << "Enter name of the file you want to open: " << endl;
cin >> inputFileName;

inputFile.open(inputFileName);
if (inputFile.fail()) {

cout << "Input file opening failed.\n";
exit(1);
}

cout << "Enter name of the file you want to send the output to: " << endl;
cin >> outFileName;

outputFile.open(outFileName);
if (outputFile.fail()) {

cout << "Output file opening failed.\n";
exit(1);
}

//while the file is open, it sends the contents to the string variable "essay"
string essay;
inputFile >> essay;

while (!inputFile.eof()) {

cout << essay << " ";
inputFile >> essay;

}

//this is to check for the correct size of the string "essay" before moving on to the rest of the code
int size = essay.size();
cout << size << endl;

return 0;
}

最佳答案

您对输入流工作原理的理解不正确。

代码的核心是这个循环:

string essay;
inputFile >> essay;
while (!inputFile.eof()) {
cout << essay << " ";
inputFile >> essay;
}

它所做的是将第一个单词读入 essay,然后,只要 eof 标记未在流中设置,它就会回显刚刚读取的单词,然后读取另一个单词, 覆盖之前的

这是正确的代码。请注意,在循环条件下检查 eof 不是一个好主意,因为它并不能完全满足您的要求,而且如果流反而进入了错误条件,还会使您陷入无限循环。

string word;
while (inputFile >> word) { // read a word and stop if this fails for any reason
essay += word;
essay += " ";
}

虽然我不确定你为什么要逐字阅读文件而不是一次全部阅读。

另外,我觉得有必要重复一下 M.M.在评论中说:您在输入中使用原始字符数组不安全 并且不必要。只需使用 string。然后您需要编写 inputFile.open(inputFileName.c_str()) 除非您的标准库足够新以具有这些函数的 string 重载,但这很好。另一种方法很危险,而且是一个非常糟糕的习惯。

关于c++ - .size() 字符串操作不读取字符的实际长度/大小 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674247/

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