为什么我没有得到这个代码的正确输出?

时间:2016-11-20 17:35:55

标签: c++ string

#include <iostream>
#include <stdio.h>
#include <ctype.h>
using namespace std;
int main()
{
    char S[100];
    gets(S);
    for (int i = 0; S[i] != '\0'; i++) {
        if (S[i] == isupper(S[i])) {
            S[i] = tolower(S[i]);
        }
        else {
            S[i] = toupper(S[i]);
        }
    }
    puts(S);
    return 0;
}

这是输出:

Input abcdE 
Your Code's Output ABCDE 
Expected Correct Output ABCDe 

1 个答案:

答案 0 :(得分:1)

在您的代码检查中:S[i] == isupper(S[i])不正确,因为您正在检查s [i]是否具有bool值:true或false !?

上面的行可以翻译为:

if(S[i] == 1) or if(S[i] == 0)
  • 如果要正确检查:

    if(isupper(s [i]))... //这里如果字符是大写,则isupper返回true,否则返回false。

你可以简单地使用三元运算符将任何大写字母转换为较低的和反向的:

char S[100];
gets(S);

for (int i = 0; i < strlen(S); i++)
    (isupper(S[i]) ) ? S[i] = tolower(S[i]) : S[i] = toupper(S[i]);

puts(S);