2012-06-11 137 views
0

我試圖刪除文件名.txt擴展名被寫入字符串「墊」:分割字符串令牌

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

如果mat="sm04567890.txt"我想那ime_datoteke="sm04567890"。 正如在例子中我嘗試使用sscanf,但它不工作(它複製到ime_datoteke)。

我該如何在C中做到這一點?

回答

1

您可以修改您的sscanf方法稍微讀一個字符串,不包括.

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

然而,這將是最好的,如果你看一下從字符串末尾的.性格,然後複製由它確定的子字符串。

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

此示例使用strrchr()查找字符串中的最後一期,然後將複製preceeds那段字符串的唯一部分。

如果未找到句點,則會複製整個字符串。

const char *fullstop; 

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

與標準的C函數strstr

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

會打印:

sm04567890