我必须在我根据ASCII值对数组中的项目进行排序的地方使用void函数。在比较所有大写字母和小写字母时,我必须进行更改。

我写了一个代码,在其中对数组的项目进行排序:

int compareWords(const void *a, const void *b) {
    const char *first = *(const char **) a;
    const char *second = *(const char **) b;
    return strcmp(first , second);
}



void sortWsmallLetters(char **listOfWor, int count) {
    qsort(listOfWor, count, sizeof(char *), compareWords);

}


但是我不知道如何将那些大写字母更改为数组中的小写字母。

最佳答案

在POSIX中,这是微不足道的。您可以使用strcasecmp

#include <strings.h>

int compareWords(const void *a, const void *b) {
    return strcasecmp(a, b);
}

void sortWsmallLetters(char **listOfWor, int count) {
    qsort(listOfWor, count, sizeof(char *), compareWords);
}


对于其他平台,您必须自己滚动(或使用Windows的stricmp)。这里的my implementation进行了一些更改以满足要求:

#include <ctype.h>

int strcasecmp(const char *str1, const char *str2)
{
    const unsigned char *s1 = (const unsigned char *)str1,
                        *s2 = (const unsigned char *)str2;
    while(*s1 && *s2)
    {
        if(tolower(*s1) != tolower(*s2))
            return tolower(*s1) - tolower(*s2);
        s1++; s2++;
    }

    return 0;
}


如果您想修改函数中的字符串...确实不应该,但是可以...

#include <ctype.h>

int strcasecmp_modify(const char *str1, const char *str2)
{
    const unsigned char *s1 = (const unsigned char *)str1,
                        *s2 = (const unsigned char *)str2;
    while(*s1 && *s2)
    {
        *s1 = tolower(*s1);
        *s2 = tolower(*s2);
        if(*s1 != *s2)
            return *s1 - *s2;
        s1++; s2++;
    }

    return 0;
}

关于c - 在C中的void函数中将数组项和大写字母排序为小写字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58477780/

10-10 09:41