0

我想输入一个字符串,将其转换为小写或大写并打印出来。到目前为止,我已经成功地实现了这一点。现在,我想修改我的程序,这样如果输入中有空格,它将打印所有转换后的字母加上空格

例如。,

输入字符串:STACK OVERFLOW输出:堆栈溢出

这是我的代码:

#包括<stdio.h>#包括<stdlib.h>#包括<stdint.h>#包括<string.h>#定义MAX_CHAR 50char to_lowercase(字符字母);char to _uppercase(字符字母);int main(无效){字符用户输入[MAX_char];printf(“输入字符串:”);扫描(“%s”,&user_input);对于(int i=0;i<=MAX_CHAR;i++){if(user_input[i]==0){退出(exit_SUCCESS);}else{printf(“%c”,to_lowercase(用户输入[i]));}}返回EXIT_SUCCESS;}char to_lowercase(字符字母){if((97<=字母)&&(字母<=122)){返回字母;}else if((65<=字母)&&(字母<=90)){返回字母+32;}else if(letter==32){返回字母;}其他的{printf(“无效字符!”);退出(exit_FAILURE);}}char to _uppercase(字符字母){if((65<=字母)&&(字母<=90)){返回字母;}else if((97<=字母)&&(字母<=122)){返回字母-32;}else if(letter==32){返回字母;}其他的{printf(“无效字符!”);退出(exit_FAILURE);}}

我当前的方法是使用ASCII码检查空格(#32),但这实际上不起作用,因为当我键入“STACK OVERFLOW”时,程序只会打印“s”

5
  • 程序将只打印“s”它不是打印“堆栈”吗?它为我打印“堆栈”,而不仅仅是“s”。 评论 4月8日14:30
  • 这个%秒的说明符扫描将读取空格分隔词.如果你想阅读整行文字,请使用fgets公司. 评论 4月8日14:30
  • 2
    在不同的注释中,请不要使用幻数在代码中。如果值65应该是字符的ASCII编码值“A”用实际的字母代替。还要注意,C规范没有强制使用ASCII,还有其他可用的编码。这就是为什么你真的应该使用标准拖鞋小写功能,而不是自己制作。 评论 4月8日14:33
  • 哦,还有循环对于(int i=0;i<=MAX_CHAR;i++)可以超出数组的边界。将条件更改为i<最大值。但这只会保护你不出界,更好的条件是用户输入[i]!='\0'。这将在到达字符串终止符时结束循环,并且不需要在循环内部进行终止符检查。 评论 4月8日14:35
  • 谢谢你们。一般来说,我是编程新手,你的帮助真的很有帮助 评论 4月8日14:44

2个答案2

重置为默认值
2

扫描,%秒只扫描不带空格的字符串。它在第一个空白字符处停止。更改为使用fgets(用户输入,用户输入大小,标准输入);.

此外,不要将数字用作字符。使用字符常量:' '对于空间,“A”对于字母A,依此类推。编译器将自动为您的C实现使用正确的值,并且代码更容易阅读。

请注意,C标准不要求字母的代码是连续的。N的代码不一定位于A的值和Z的值之间。需要对字符进行分类的程序应该包括<ctype.h>和使用isupper(上),岛国,依此类推,如if(isupper((unsigned char)x))返回tolower((unsigned char)x);.

2
  • 好的,现在我可以得到空白了。现在唯一的问题是我的程序总是打印“无效字符!” 评论 4月8日14:37
  • @user23569449:输入的末尾有一个换行符。 评论 4月8日14:38
0

许多问题。

  1. 如果到达字符串末尾,则不要退出程序。如果字符不是字母,则相同。
  2. 使用fgets
  3. 不要使用幻数。
  4. scanf不擅长阅读行,因为它会在空白处显示。
  5. 使用ctypes中的toupper-tolower函数。小时
#定义MAX_CHAR 50char to_lowercase(字符字母);char to _uppercase(字符字母);int main(无效){字符用户输入[MAX_char];printf(“输入字符串:”);if(fgets(用户输入,MAX_CHAR,标准输入)){for(size_t i=0;用户输入[i];i++){printf(“%c”,to_lowercase(user_input[i]));}}}char to_lowercase(字符字母){如果(字母>=“A”&&字母<=“Z”)字母+=“A”-“A”;回信;}char to _uppercase(字符字母){如果(字母>=“a”&&字母<=“z”)字母+=“a”-“a”;回信;}

https://godbolt.org/z/fxdG58G6G

0

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.