我想输入一个字符串,将它们转换为小写或大写并打印它们。到目前为止,我已经成功地实现了这一点。现在,我想修改我的程序,如果输入中有空格,它将打印所有转换后的字母加上空格
例如,
Enter a string: STACK OVERFLOW
Output: stack overflow
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<string.h>
#define MAX_CHAR 50
char to_lowercase(char letter);
char to_uppercase(char letter);
int main(void)
{
char user_input[MAX_CHAR];
printf("Enter a string: ");
scanf("%s", &user_input);
for (int i = 0; i <= MAX_CHAR; i++)
{
if (user_input[i] == 0){exit(EXIT_SUCCESS);}
else{printf("%c", to_lowercase(user_input[i]));}
}
return EXIT_SUCCESS;
}
char to_lowercase(char letter)
{
if ((97 <= letter) && (letter <= 122)) {return letter;}
else if ((65 <= letter) && (letter <=90)) {return letter + 32;}
else if (letter == 32){return letter;}
else
{
printf("Not a valid character!");
exit(EXIT_FAILURE);
}
}
char to_uppercase(char letter)
{
if ((65 <= letter) && (letter <= 90)) {return letter;}
else if((97 <= letter) && (letter <= 122)) {return letter - 32;}
else if (letter == 32){return letter;}
else
{
printf("Not a valid character!");
exit(EXIT_FAILURE);
}
}
我当前的方法是使用 ASCII 代码检查空格(#32),但这实际上不起作用,因为当我输入“STACK OVERFLOW”时,程序只会打印“s”
在
scanf
中,%s
仅扫描不带空格的字符串。它停在第一个空白字符处。更改为使用fgets(user_input, sizeof user_input, stdint);
。