我有以下的char数组:
filename[256] = "one.txt";
shortname[11] = "ONE TXT";
在c?
中比较这两个数组的最佳方法是什么? short name
的前8个字符必须适合.
中filename
之前的字符。
我的情况是上述情况有效。
答案 0 :(得分:0)
我不知道比较字符串的最佳方法,但直截了当的方法可以采用以下方式
#include <stdio.h>
#include <ctype.h>
int main( void )
{
char filename[256] = "one.txt";
char shortname[11] = "ONE TXT";
char *p = filename;
char *q = shortname;
size_t i = 0;
while ( i < 8 && ( char )toupper( ( unsigned char )*p ) == *q ) ++i, ++p, ++q;
if ( *q == ' ' || i == 8 ) puts( "They coincide" );
}
程序输出
They coincide
即程序检查文件名的初始字符是否与短名称一致。 filname中的点之前可以有多个字符,而不是shortname中的字符。
否则,您可以添加条件*p == '.'
答案 1 :(得分:0)
我不太确定你需要什么,所以我给你了解我的理解:
#include<stdio.h>
#include<string.h>
int main(void){
char filename[256] = "one.txt";
char shortname[11] = "ONE TXT";
size_t lenght = strlen(filename);
unsigned int i;
while(shortname[i]|=' ', shortname[++i]) {
;
}
for(i=0;i<lenght;i++){
if(filename[i] == shortname[i]){
printf("%c",filename[i]);
}else{
break;
}
}
printf("\n");
return 0;
}
输出:
一个
答案 2 :(得分:0)
感谢您的回答。我这样做了。此代码在循环中运行,该循环检查32个字节块形成FAT目录以查找匹配的目录条目:
int extensionPos=0;
int extensionCounter = 0;
int j;
int fnf=0; //file not found marker
int hasExtension=0;
//Check if filename has an extension and remember the position
for (i=0;i<11;i++){
if (filename[i] == '.'){
break;
}else{
extensionPos++;
}
}
//Is position < 11? filename has an extension
if (extensionPos<11)
hasExtension=1;
for (j=1;j<extensionCounter;j++){
if (FAT_DirEntry->DIR_shortName[j] != filename[j]){
fnf=1;
break;
}
}
if (hasExtension == 1){//Do only check extension if filename has one
extensionCounter +=1; // extensionCounter +1 because I don't want to work with the '.'
for (j=8;j<11;j++){
if (FAT_DirEntry->DIR_shortName[j] != filename[extensionCounter]){
fnf=1;
break;
}
extensionCounter++;
}
}
if (fnf == 0){
...
}
答案 3 :(得分:-1)
使用两个索引,每个字符串对应一个索引,并按char(忽略大小写)比较char并跳过空格和点。