本原創文章來源:C++技術網 http://www.cjjjs.cn ,閱讀更多原創精品文章,歡迎訪問C++技術網。
以前學習時做的寫的一個小算法,就是分析文件路徑,提取文件擴展名。這個在處理文件時會用到。說到底,就是分析字符串的問題。這里使用C語言實現,將分析的算法封裝在一個函數中,方便使用。大家需要使用,可以自己再調整算法代碼。
程序運行截圖:
下面是程序代碼,完整的控制台代碼:
#include <stdio.h>
#include <string.h>
char * getType(char fileName[], char type[])
{
int i=strlen(fileName)-1, j;
char ch;
for(type[0]='\0';i>=0;i--)
{
if(fileName[i] == '.')
{
// 遇到文件類型分隔符
for(j=i; fileName[j]!='\0'; j++)
{
ch = fileName[j];
type[j-i] = ('A'<=ch && ch<='Z') ? (ch+'a'-'A'): ch;
}
type[j-i] = '\0';
break;
}
}
return type;
}
char * getTypeName(char type[], char typeName[])
{
if(strcmp(".doc", type) == 0)
strcpy(typeName, "WORD 文檔");
else if(strcmp(".xlsx", type) == 0)
strcpy(typeName, "Excel 工作表");
else if(strcmp(".pptx ", type) == 0)
strcpy(typeName, "PowerPoint 演示文稿");
else if(strcmp(".txt", type) == 0)
strcpy(typeName, "文本文檔");
else
strcpy(typeName, "其他類型文檔");
return typeName;
}
int main(int argc, char *argv[]) {
char fileName[300];
char type[10];
char typeName[100];
printf("輸入文件名,可以包含多層目錄路徑,可以含空格,按 ctrl + z 停止輸入\n");
while(gets(fileName)!=NULL)
{
getType(fileName, type);
getTypeName(type, typeName);
printf("file:[%s] type is [%s],文件類型:%s\n", fileName, type,typeName);
}
return 0;
}
代碼解釋:
strlen、strcmp、strcpy函數在string.h頭文件中聲明,所以需要包含這個頭文件。getType函數就是提取文件擴展名的函數了。函數的第二個參數和返回值,都是作為返回擴展名的。你可以根據情況取舍。
通過對文件名字符長度計數,然后從最尾部向字符串開頭的方向遍歷,第一次遇到的.號的位置就是擴展名分割的地方。然后在里層的for循環中提取到字符串結尾之間的幾個字符作為擴展名。
至於getTypeName則是解釋一下擴展名的類型名稱,沒有什么,就是演示提取到擴展名后的使用場景而已。在main中也有使用的代碼。完整的代碼,可以很清楚各個地方的細節。
學習時留存的筆記,分享出來,就不再電腦存留了,在電腦容易丟失。這樣,大家也可以看,一舉兩得。
本原創文章來源:C++技術網 http://www.cjjjs.cn ,閱讀更多原創精品文章,歡迎訪問C++技術網。
