我试图在C ++中创建一个程序,它会将你输入的任何句子转换为
-all caps
- 所有小写
- 大写字母将用小写&反之亦然
到目前为止,我已经正确地写了所有内容,我唯一能解决的部分是如何让它回复三个单独的回复。如果我在while循环中只有一个函数它工作正常,但不是所有三个&我不知道怎么解决这个问题。谢谢!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void allCaps(char ch);
void allLows(char ch);
void mixed(char ch);
char ch;
int main()
{
printf("Enter Sentence:\n");
while((ch=getchar()) != '\n')
{
allCaps(ch);
printf("%c",ch,"\n");
allLows(ch);
printf("%c",ch,"\n");
mixed(ch);
printf("%c",ch,"\n");
}
return ch;
}
void allCaps(char ch)
{
if(ch >= 'a' && ch <='z')
::ch=ch-32;
}
void allLows(char ch)
{
if(ch>='A'&&ch<='Z')
::ch=ch+32;
}
void mixed(char ch)
{
if(ch >= 'a' && ch <='z')
::ch=ch-32;
else if(ch>='A'&&ch<='Z')
::ch=ch+32;
}
答案 0 :(得分:0)
您正在做的是在阅读时连续3次输出每个字母。
您可以定义三个字符串,而不是这样做:std::string s1="",s2="",s3="";
然后你可以做到
s1+=allCaps(ch);s2+=allLows(ch);s3+= mixed(ch);
在您的while循环中,最后您只需输出s1
,s2
和s3
。
答案 1 :(得分:0)
除了您可以使用io-stream,tolower
和toupper
,引用和其他c++特定功能之外,您的主要问题是全局变量ch
。< / p>
考虑输入char 'A'
会发生什么。 allCaps()
将获得大写字母&#39; A&#39;作为输入,将其转换为(仍然)大写&#39; A&#39;并将结果存储在全局变量ch
中。此ch
(现在(或仍然)包含'A'
)现在将传递给allLows()
,现在又将大写'A'
转换为小写'a'
并将结果再次存储在全局ch
中。这是有趣的部分。请记住,您最初输入的是大写'A'
,因此mixed()
应该生成小写字母吗?但由于allLows()
已将您的输入转换为小写字母,mixed()
现在将再次生成一个大写字母。
您可以通过不全局声明ch
并使函数返回结果来解决此问题。例如看到新的allCaps()
char allCaps(char ch)
{
if(ch >= 'a' && ch <='z')
return ch - 32;
return ch;
}
并像这样使用
int main()
{
printf("Enter Sentence:\n");
char ch; // <-- local declaration
while((ch=getchar()) != '\n')
{
printf("%c\n", allCaps(ch)); <-- all get the same (not modified) input
printf("%c\n", allLows(ch));
printf("%c\n", mixed(ch));
}
}
然而,这仍然不会完全符合您的要求。而不是阅读单个字符,而是使用std::getline
读取整个std::string
,然后循环遍历每个字符并使用tolower
和toupper