【问题标题】:Replace new line character (\n) with a string用字符串替换换行符 (\n)
【发布时间】:2014-03-15 20:12:28
【问题描述】:

只是一个简单的问题。在读取文本文件并寻找换行符以替换为其他内容时,可以简单地查找 '\n' 吗?还是应该寻找 ascii 值?

我需要做的,澄清是在文本文件中找到新行,如果只有一个,则删除它们,如果连续有两个或多个,我需要添加一个字符串来代替它们(总是比新行的数量少一)。

我对如何做到这一点有一个很好的想法,但我想知道如何在任何给定行的末尾查找换行符来替换它?

在伪代码中(我不相信你应该需要我的任何实际代码来解决这样的问题)它会是:

if (line[x] & line [x+1] = 换行){ 用这个代替 } else if (line[x] = new line){ 消除 }

【问题讨论】:

  • '\n' 是 ASCII 值。根本不清楚你的问题是什么。显示一个测试用例。
  • @LightnessRacesinOrbit 这不是我遇到的问题,只是一个问题。我确信它的 ASCII 值是 0xA。
  • 如果您使用 getline() 从文件中获取行,则换行符将被提取并丢弃,因此无法在字符串中找到。可以将整个文件读入“std::stringstream ss;”对象,在一行代码中。这将在 ss 中保留换行符,然后您可以使用 std::string::find() 查找“\n”或“\n\n”等。
  • @CristianC.: 0xA 和'\n' 仅在类型上不同,在值上没有区别。事实上,这意味着'\xA' 和'\n' 是完全 相同的文字。 \n 被定义为这个意思。将其视为一个方便的常量。
  • '\n' == 0xA(只要您的执行字符集兼容 ASCII)。

标签: c++ io newline


【解决方案1】:

据我了解,不应保留换行符。逐行阅读:

#include <string>
#include <iostream>
#include <fstream>

std::string s,totalString;
while (std::getline(file, s))
{
    if(s.empty())
       totalString+="added string";
    else
       totalString+=s;
}

【讨论】:

  • 我相信这正是我想要的,这就是我的想法,唯一的问题是:如果只有一个新行,请将其删除,但如果有两个或更多新行,添加字符串。因此,如果连续有 3 行新行,请添加两个字符串。我不确定如何完成以下操作: if(s.empty() && s+1.empty()){
  • @Cristian C.:您可以添加一个计数器,每次遇到空行时都会增加一个计数器。当您遇到非空行或文件结束后,您需要编写尽可能多的字符串并重置计数器。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2011-09-18
  • 2020-07-23
  • 2014-10-16
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多