gpt4 book ai didi

c - 在 C 中使用 qsort() 并跳过特定的字符集

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:35 24 4
gpt4 key购买 nike

#define alen(x) ((sizeof x) / (sizeof *x))

typedef struct {
char *movie_title;
int minutes;
float price;
} DVD;

int
main()
{
DVD movies[10] = {
{ "The Dark Knight", 153, 14.99},
{ "Iron Man", 126, 12.99},
{ "Batman Begins", 141, 9.99},
{ "Batman Returns", 126, 9.99},
{ "Teenage Mutant Ninja Turtles", 87, 7.99},
{ "The Incredible Hulk", 114, 12.99},
{ "X-Men", 104, 12.99},
{ "Spider-Man", 121, 14.99},
{ "Fantastic Four", 106, 14.99},
{ "Captain America", 124, 19.99},
};

qsort(movies, alen(movies), sizeof *movies, tcomp);

printf("Movies sorted: \n");
for (int i = 0; i < alen(movies); i++)
printf("%s\n", movies[i].movie_title);
}

int
tcomp (const void * a, const void * b)
{
return strcmp(((DVD*)a)->movie_title,((DVD*)b)->movie_title);
}

当使用函数 tcomp 和 qsort 对电影片名进行排序时,我需要忘记电影片名中的“A”、“An”和“The”。有人可以帮我弄清楚如何以优雅的方式做到这一点吗?

最佳答案

如果你只关心前缀词,那么在你做比较之前,调整指针

char* skip_irrelvant(char* s)
{
while(*s == ' ') s++;
if(strnicmp(s, "The ", 4)==0) s+=4;
return s;
}


int tcomp (const void * a, const void * b)
{
char* s1 = ((DVD*)a)->movie_title;
char* s2 = ((DVD*)b)->movie_title;
s1 = skip_irrelvant(s1);
s2 = skip_irrelvant(s2);

return strcmp(s1, s2);
}

关于c - 在 C 中使用 qsort() 并跳过特定的字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com