用标记拆分字符串

时间:2012-06-11 19:35:40

标签: c string split

我正在尝试从用字符串“mat”写的文件名中删除.txt扩展名:

sscanf(mat, "%s.txt", ime_datoteke);

如果mat="sm04567890.txt"我需要ime_datoteke="sm04567890"。 在示例中,我尝试使用sscanf,但它不起作用(它将mat复制到ime_datoteke)。

我怎样才能在C中完成?

4 个答案:

答案 0 :(得分:1)

您可以稍微修改sscanf方法,以阅读不包含.的字符串:

sscanf(mat, "%[^.].txt", ime_datoteke);

但是,最好是从字符串末尾查找.字符,然后复制由它确定的子字符串。

char* dot = strrchr(mat, '.');
strncpy(ime_datoteke, mat, dot - mat);

答案 1 :(得分:1)

使用strrchr

char* pch = strrchr(str,'.');

if(pch)
   *pch = '\0';

答案 2 :(得分:1)

此示例使用strrchr()查找字符串中的最后一个句点,然后仅复制该句点之前的字符串部分。

如果未找到句点,则复制整个字符串。

const char *fullstop;

if ((fullstop = strrchr(mat, '.')))
    strncpy(ime_datoteke, mat, fullstop - mat);
else
    strcpy(ime_datoteke, mat);

答案 3 :(得分:0)

使用标准C函数strstr

char a[] ="sm04567890.txt";
char *b = strstr(a, ".txt");
*b = '\0';
printf("%s\n", a);

将打印:

sm04567890