【问题标题】:How can I convert my strings to lowercase?如何将我的字符串转换为小写?
【发布时间】:2021-02-03 22:20:30
【问题描述】:

该代码旨在检查两个单词是否是字谜。我希望它区分大小写,但是使用 strlwr 会产生错误。如何更改它以使其适用于小写和大写?目前它只适用于其中一个。

#include <stdio.h>
#include <string.h>

void sort(char str[]);

int main(void){ 
    char FirstWord[10];
    char SecondWord[10];

    printf("Enter the first word \n");
    scanf("%s", FirstWord);
    printf("Enter the second word \n");
    scanf("%s", SecondWord);


    sort(FirstWord);
    sort(SecondWord);

    if(strcmp(FirstWord, SecondWord)==0)
       printf("First word and second word are the same \n");
    else
       printf("Words are different \n");
}

void sort(char str[]){
    int i,j,swapper, ArrayLength = strlen(str);

    for(i=0; i<ArrayLength; i++)
        for(j=0; j<ArrayLength; j++)
            if (str[i] < str[j]){
                swapper=str[i];
                str[i]=str[j];
                str[j]=swapper;
            }
}

【问题讨论】:

  • 不要说“创建错误”,而是请显示您收到的准确错误文本。

标签: c


【解决方案1】:

使用strcasecmp 函数进行不区分大小写的比较。这在 POSIX 兼容系统(即 Linux、UNIX、OSX)上可用。对于 Windows,请使用 stricmp

编辑:

因为您在进行比较之前要对字符进行排序,所以简单的不区分大小写的比较是不够的。

您需要先使用strlwr 将每个字符串转换为小写,然后在每个字符串上调用sort。然后你可以和strcmp比较。

【讨论】:

  • @smac89 不是,但给了一个替代方案。
【解决方案2】:

不确定strlwr 是什么,但您可以使用标准库中的tolowertoupper 将两个字符串分别转换为小写或大写,然后进行比较。

for (int i = 0; i < 10; i++) {
    FirstWord[i] = tolower(FirstWord[i]);
}

另一方面,在读取未知长度的输入时,您应该优先使用fgets 而不是scanf,以避免读取超出缓冲区允许的范围。见How to read input of unknown length using fgets

【讨论】:

    【解决方案3】:

    仅使用标准 C 并假设这是一个练习,您可以创建一个函数来小写任何字符串。 如果您查看 ASCII 表 (http://www.asciitable.com/),从 A 到 Z 的每个字符都有对应的 ASCII 码。每个小写字符都有不同的 ASCII 码。

    非常粗略,你的函数可以查看字符串中的一个字符,检查它的 ASCII 码是否在 A-Z 之内,如果是,则加 32(即大小写字符之间的距离)。

    所以是这样的:

    void lowercase(char *str) {
        for (int i = 0 ; str[i] ; i++) {
            if ( str[i] >= 65 && str[i] <= 90) {
                str[i] = str[i] + 32;
            }
        }
    }
    

    (不声称这是完美的,只是展示想法)

    请注意,char 数组(字符串)是通过引用(而不是值)传递给函数的,因此在函数中更改 str[i] 会更改原始字符。现在,您可以在进行比较之前在两个输入上调用此函数。

    【讨论】:

    • 小心。如果传递字符串文字,您的函数将失败,因为字符串文字是只读的并且尝试修改它们会调用未定义的行为。
    猜你喜欢
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2011-01-16
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多