【发布时间】:2011-12-19 06:36:15
【问题描述】:
假设我必须从另一个字符串中删除一个字符串的 最后一次出现。我该怎么办?
详细来说,我在 c 字符串中有一个文件名(gchar* 或 char*)
C:\SomeDir\SomeFolder\MyFile.pdf
我想删除扩展名 .pdf ,并将其更改为其他内容,例如 .txt 或 .png 。什么是最不麻烦但高效,方便和跨平台的方法?谢谢。
注意:我知道这在 C++ 中是一件非常简单的事情,但对于这个项目,我绝对必须使用 C 而不是其他语言。 (学历要求)
注意2:虽然你可以推荐其他第三方库,但我目前只能访问C标准库和GLib。
注意 3:我用“C”标签搜索过类似的问题,但似乎找不到。
【问题讨论】:
-
扩展是否总是 3 个字符长(你的例子表明)并且它们总是在路径的末尾?你的源字符串是什么编码的?如果它是常规的 ASCII,你可以这样做
memcpy(source[strlen(source) - 4 /* count for \0 */], new_ext /* 3 chars + \0*/, 4); -
@RedX 对于我的程序,文件名将作为命令行参数输入,因此我不确定扩展名的大小。例如,如果有人传递 *.aspx 文件怎么办?是的,字符串是 ASCII 格式,扩展名总是在路径的末尾。
-
然后我会说反向搜索字符串的最后一个点,从输入的长度中减去它并创建一个具有正确扩展名的新字符串。
标签: c string glib standard-library