创建一个程序,其中句子在C++中全部大写,全部小写

Creating a program where a sentence is turned all caps and all lowercase in C++

本文关键字:全部 句子 C++ 程序 一个 创建      更新时间:2023-10-16

我正在尝试创建一个程序C++它将把你输入的任何句子变成

-全部大写

-全部小写

-大写字母将以小写形式切换,反之亦然

到目前为止,我已经正确地写好了所有内容,我唯一无法弄清楚的部分是如何让它给我三个单独的回复。如果我在 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;
}

除了您可以使用io-streams,tolowertoupper,引用和其他C ++特定功能之外,您的主要问题是全局变量ch

考虑一下如果输入字符'A'会发生什么。allCaps()将获取大写字母"A"作为输入,将其转换为(仍然)大写字母"A"并将结果存储在全局变量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("%cn", allCaps(ch)); <-- all get the same (not modified) input
printf("%cn", allLows(ch));
printf("%cn", mixed(ch));
}
}

但是,这仍然不会完全按照您想要的方式进行。例如std::getline,不是读取单个字符,而是读取整个std::string,然后循环每个字符并使用tolowertoupper进行转换

您正在做的是在阅读每个字母时连续输出 3 次。

与其这样做,不如定义例如三个字符串,如下所示:std::string s1="",s2="",s3="";然后你可以做

s1+=allCaps(ch);s2+=allLows(ch);s3+= mixed(ch);

在你的 while 循环中,最后你只需输出s1s2s3