在C ++

时间:2017-03-23 09:38:28

标签: c++

我试图在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;
}

2 个答案:

答案 0 :(得分:0)

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

您可以定义三个字符串,而不是这样做:std::string s1="",s2="",s3=""; 然后你可以做到

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

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

答案 1 :(得分:0)

除了您可以使用io-stream,tolowertoupper,引用和其他特定功能之外,您的主要问题是全局变量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,然后循环遍历每个字符并使用tolowertoupper

进行转换