如何从另一个字符串中删除最后一个字符串?

时间:2011-11-01 06:29:36

标签: c string glib standard-library

假设我必须从另一个字符串中删除字符串的最后一次出现。我该怎么做呢?

详细说明,我在c字符串(gchar *或char *)

中有一个文件名
  

C:\ SomeDir \ SomeFolder \ MyFile.pdf

我想删除扩展名 .pdf ,并将其更改为其他内容,例如 .txt .png 。什么是最麻烦但高效,方便和跨平台的方式呢?感谢。

note :我知道在C ++中这是一件非常简单的事情,但对于这个项目,我绝对必须使用C而不是其他语言。 (学术要求)

note 2 :虽然您可以推荐其他第三方库,但我目前只能访问C标准库和GLib。

note 3 :我使用“C”标签搜索了类似的问题,但似乎找不到任何问题。

4 个答案:

答案 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;
}