假设我必须从另一个字符串中删除字符串的最后一次出现。我该怎么做呢?
详细说明,我在c字符串(gchar *或char *)
中有一个文件名C:\ SomeDir \ SomeFolder \ MyFile.pdf
我想删除扩展名 .pdf ,并将其更改为其他内容,例如 .txt 或 .png 。什么是最麻烦但高效,方便和跨平台的方式呢?感谢。
note :我知道在C ++中这是一件非常简单的事情,但对于这个项目,我绝对必须使用C而不是其他语言。 (学术要求)
note 2 :虽然您可以推荐其他第三方库,但我目前只能访问C标准库和GLib。
note 3 :我使用“C”标签搜索了类似的问题,但似乎找不到任何问题。
答案 0 :(得分:1)
查看基本名称。
NAME
dirname, basename - Parse pathname components
SYNOPSIS
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
DESCRIPTION
Warning: there are two different functions basename() - see below.
The functions dirname() and basename() break a null-terminated
pathname string into directory and filename components. In the
usual case, dirname() returns the string up to, but not including,
the final ’/’, and basename() returns the component following the
final ’/’. Trailing ’/’ characters are not counted as part of the
pathname.
答案 1 :(得分:1)
我通常会使用“拆分路径”功能来分隔完整路径名(dir,path,name,ext)的所有四个部分。 最好的祝福 奥利弗
答案 2 :(得分:1)
char fil[] = "C:\\SomeDir\\SomeFolder\\MyFile.pdf";
char fil2[1000];
char extension[] = ".tmp";
// search for . and add new extension
sprintf(fil2, "%s%s", strtok(fil, "."), extension);
printf("%s\n", fil2);
答案 3 :(得分:1)
只需使用'strrchr'函数修改上述'strtok'代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_PATH 255
int main()
{
char f[MAX_PATH] = "dir\\file.pdf";
char f1[MAX_PATH];
char ext[] = ".tmp";
char *ptr = NULL;
// find the last occurance of '.' to replace
ptr = strrchr(f, '.');
// continue to change only if there is a match found
if (ptr != NULL) {
snprintf(f1, (ptr-f)+1, "%s", f);
strcat(f1, ext);
}
printf("%s\n", f1);
return 1;
}