无法使用C中的循环在没有toupper的情况下将char *指针转换为低/大写char *指针

问题描述 投票:0回答:1

我正在尝试使功能toLowerCase(char* string),但无法使其正常工作。

这是我的代码

void toLowerCase(char* string){

int i=0;
while(*(string+i)!= '\0'){
    if (*(string+i) >= 'A' && *(string+i)<='Z'){
        *(string+i)= *(string+i)+32;
    }
    i++;
}
printf("%s",string);

}

我正在尝试通过使用*(string + i)访问每个元素并使用ASCII转换为小写来遍历char *指针的字符串。

我是新来的,如果在抱歉之前已经回答了这个问题,但是我问是因为我找不到解决我问题的具体方法。我已经尝试过此线程中的内容:Converting Char * to Uppercase in C但这对我也不起作用。

编辑:这就是我调用函数的方式

int main() {
toLowerCase("HELLO WORLD");
return 0; }

非常感谢您的时间

c loops pointers char tolower
1个回答
0
投票

出于历史原因,将C字符串文字键入char[],但实际上是char const[],不允许您对其进行修改。

幸运的是,C使您可以使用字符串文字初始化可写的char数组,因此非常容易创建可写副本:

#include <stdio.h>
void toLowerCase(char* string)
{
    int i=0;
    while(*(string+i)!= '\0'){
        if (*(string+i) >= 'A' && *(string+i)<='Z'){
            *(string+i)= *(string+i)+32;
        }
        i++;
    }
}
int main()
{
     char string[]="HELLO WORLD";
     toLowerCase(&string[0]);
     puts(string);
    //prints: hello world
}

https://gcc.godbolt.org/z/X4YA5B

([*(string+i)而不是string[i]有点不寻常,我至少用('a'-'A')替换了魔术常数32,但被调用方的代码没有问题。]

© www.soinside.com 2019 - 2024. All rights reserved.