【问题标题】:Replacing a word in a file, using C使用 C 替换文件中的单词
【发布时间】:2011-02-18 23:17:26
【问题描述】:

如何使用C 将文件中的单词替换为另一个单词?

例如,我有一个文件,其中包含:

my friend name is sajid

我想用grandfather替换friend这个词,这样文件就变成了:

my grandfather name is sajid 

(我正在 Ubuntu Linux 上开发。)

更新:

我正在用 C 进行归档。我创建了一个 .txt 文件并将一些数据写入其中,但是随着程序的进行,我必须搜索一些文本并将其替换为其他单词。我面临的问题是假设在我写的文件中

"I bought apple from the market"

如果我用菠萝替换苹果,因为苹果有 5 个字符,菠萝有 9 个字符,它会写成

"I bought pineapple m the market"

它也影响了apple后面写的字。

我必须使用 C 来完成,而不是命令行脚本。

【问题讨论】:

标签: c replace


【解决方案1】:

如何使用现有的 Linux sed 程序?

sed -i 's/friend/grandfather/' filename

这将在现有文件中将朋友替换为祖父。如果您想保留原件,请先复制一份!

编辑:

或者,将文件加载到 STL 字符串中,使用 this 等技术将“朋友”替换为“祖父”,然后将新字符串保存到文件中。

【讨论】:

  • 他确实在C 中提到过他想这样做。
  • 我知道,但是使用 sed 可以让他不必编写任何代码。目前尚不清楚 sajid 必须 编写代码,还是编写代码只是为了对文件进行搜索/替换。
  • 这听起来像是学习C(或者可能是家庭作业?)的任务。如果是这样的话,使用sed 不会有太大的好处。
  • 是的。从 C 生成 sed 会被归类为作弊吗? ;)
  • 我相信会的!不错的尝试... :)
【解决方案2】:

您已经意识到,您将无法在原始文件中进行更改。

简单的解决方案是从原始文件中读取每个字符串并将其写入标准输出,并根据需要进行替换。在伪代码中:

open original file
while not at end of original file
  get next string from original file
  if string == "friend"
    write "grandfather" to standard output
  else
    write string to standard output
end while

然后,您可以在执行时将输出重定向到另一个文件,类似于 sedawk 的工作方式。

或者,您可以在代码中创建目标文件并直接写入。如果需要用新文件替换原文件,可以使用stdio中的remove()rename()库函数。

【讨论】:

  • 非常感谢 John Bode 明白了你的意思,但我还有一个问题需要不断更新,并且文件的每一行都有不同的单词可以替换为我你想要的我会解释你我的程序
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2014-04-15
  • 2020-01-06
  • 1970-01-01
相关资源
最近更新 更多