如何从文件中读取消息,仅修改单词
How to read a message from a file, modifying only words?
假设我有以下文本:
My name is myName. I love
stackoverflow .
Hi, Guys! There is more than one space after "Guys!" 123
And also after "123" there are 2 spaces and newline.
现在我需要按原样读取这个文本文件。只需要用字母数字单词做一些动作。在它之后,我必须打印它,改变单词,但空格,换行符和标点不变,并在相同的位置。当改变字母数字时,单词长度保持不变。我已经尝试过用库检查字母数字值,但代码变得非常混乱。还有别的办法吗?
您可以使用fgets()
函数逐行读取文件。它将填充char数组,你可以使用这个数组,例如迭代这个数组,将它分成整数;用" fwrite()
"功能将固定字符串写入新文件
如果你喜欢用c++的方式处理文件(iostream),你可以使用istream::getline。这将节省空间;但是它会消耗"n"。如果需要保存"n"(有时可以是"r"answers"rn"),可以使用istream::get.
也许你应该看看Boost Tokenizer。它可以将字符串分解为一系列令牌并遍历它们。下面的示例将一个短语分成几个单词:
int main()
{
std::string s = "Hi, Guys! There is more...";
boost::tokenizer<> tok(s);
for(boost::tokenizer<>::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
std::cout << *beg << "n";
}
return 0;
}
但是在您的情况下,您需要提供TokenizerFunc,它将在字母数字/非字母数字边界处拆分字符串。
有关更多信息,请参阅Boost Tokenizer文档和已经提供的char_separator, offset_separator和escaped_listrongeparator的实现。
您的代码变得混乱的原因通常是因为您没有将问题分解为清晰的函数和类。如果您这样做,您将有几个函数,每个函数只做一件事(不混乱)。你的main
函数会调用这些简单的函数。如果函数名选择得好,main
函数也会变得简短而清晰。
在这种情况下,你的main函数需要做:
- 循环:读取文件 的每一行
- 检查每一行是否有"特殊"字出现。
- 如果出现特殊字,替换为
额外提示:一行文本可以存储为std::string
,也可以被std::getline(std::cin, line)
读取
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何根据单词在文本中出现的概率输出单词
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 从字符串变量中逐字符读取单词
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 使用std::mt19937从字符串中返回一个随机单词
- 修改创建帐户程序
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何用for循环在c++中生成单词三角形
- 我如何修改我的C 程序以显示用户输入的单词,并使用堆栈向后
- 通过修改二叉搜索算法来改进它,使其在搜索大量单词(单词列表)中的单词时工作得更快
- 需要修改堆栈/链表程序以确定单词是否为回文
- 如何从文件中读取消息,仅修改单词