我需要做的是当给定一个文本或字符串时
\0abc\n\0Def\n\0Heel\n\0Jijer\n\tlkjer
我需要使用 qsort 并基于 rot 编码比较对这个字符串进行排序。
int my_rot_conv(int c) {
if ('a' <= tolower(c) && tolower(c) <= 'z')
return tolower(c)+13 <= 'z' ? c+13 : c-13;
return c;
}
int my_rot_comparison(const void *a, const void *b) {
char* ia = (char*) a;
char* ib = (char*) b;
int i=0;
ia++, ib++;
while (i<strlen(ia)) {
if (ia[i] == '\0' || ia[i] == '\n' || ia[i] == '\t' || ib[i] == '\0' || ib[i] == '\n' || ib[i] == '\t') {
i++;
}
if (my_rot_conv(ia[i]) > my_rot_conv(ib[i])) {
return 1;
} else if (my_rot_conv(ia[i]) < my_rot_conv(ib[i]))
return -1;
}
return 0;
}
我要比较两个以 \0 开头的字符串,在下面的示例中得到 -1。
printf("%d \n", my_rot_comparison("\0Abbsdf\n", "\0Csdf\n"));
但这不适用于带有 qsort 的字符串,因为ia++, ib++;
它仅适用于一个单词比较。
char *my_arr;
my_arr = malloc(sizeof(\0abc\n\0Def\n\0Heel\n\0Jijer\n\tlkjer));
strcpy(my_arr, \0abc\n\0Def\n\0Heel\n\0Jijer\n\tlkjer);
qsort(my_arr, sizeof(my_arr), sizeof(char), my_rot_comparison);
并且数组应该像\0Def\n\0Heel\n\0Jijer\n\0\n\tlkjer
我的问题是如何定义适用于包含\0
and\t
和\n
字符的字符串的比较函数?