以前学习时做的写的一个小算法,就是分析文件路径,提取文件扩展名。这个在处理文件时会用到。说到底,就是分析字符串的问题。这里使用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中也有使用的代码。完整的代码,可以很清楚各个地方的细节。
学习时留存的笔记,分享出来,就不再电脑存留了,在电脑容易丢失。这样,大家也可以看,一举两得。