【问题标题】:C++ function to check if char is a capital letter and compute no of capital letters in a given string用于检查 char 是否为大写字母并计算给定字符串中的大写字母数量的 C++ 函数
【发布时间】:2017-05-19 01:01:21
【问题描述】:

我尝试编写一个 C++ 函数来检查 char 在给定字符串中是否为大写字母。

这是我的尝试:

#include<iostream>
#include <conio.h>
#include<string>
using namespace std;
int iscapital(char x)
{
 if (x>='A'&&x<='Z')    return 1;

 else  return 0;
}
main()
{
char a[20];int len; int c=0;
cout<<"enter your line: ";
cin>>a;
len=strlen(a);
for (int i=0;i<=len;i++)
iscapital(a[i]);
if (iscapital)
{
    c++;
}

cout<<"capital letter in string is: "<<c;
}

【问题讨论】:

  • 校验码需要自己写吗?如果不使用isupper
  • 或者locale-enabled isupper,如果你关心的不是英文ASCII。
  • @FredLarson - C 的 isupper 也是区域敏感的。它使用全局语言环境。
  • 不应该mainint main()?我也看到你在学习,我强烈建议你学习std::string,像strlenchar x[100] 这样的东西更像C 方式而不是C++ 做事方式。而且,你写了if(iscapital) 我猜你的意思是if(iscapital(a[i]))

标签: c++


【解决方案1】:

您的代码应如下所示:

int iscapital(char x)
{
       if (x >='A' && x <= 'Z')    return 1;
       else  return 0;
}

int main()
{
  char a[20];int len; int c=0;
  cout<<"enter your line: ";
  cin.getline(a , 20);      
  // Note : ' getline ' will read the entire line written in the console and will stop only at the end line mark...will include and the white spaces .
  // http://stackoverflow.com/questions/4745858/stdcin-getline-vs-stdcin

  len=strlen(a);
  for (int i = 0;i < len;i++)
  {
    if (iscapital(a[i]))
    {
       c++;
    }
  }
  cout<<"capital letter in string is: "<<c;

  return 0;
 }

【讨论】:

  • 也许是时候阅读一些文档了...在 c++ 中,bool true 表示值 1(转换为 int)//stackoverflow.com/questions/2725044/…
  • 根据标准,你应该对这个假设是安全的。 C++ bool 类型有两个值 - true 和 false,对应的值为 1 和 0。
【解决方案2】:

你没有正确使用iscapital

for (int i=0;i<=len;i++)
    iscapital(a[i]); // Call the function, ignore the result
if (iscapital)   // <- This is not valid C++
{
    c++;
}

你想要的是这个

for (int i=0;i<=len;i++)
    if (iscapital(a[i]))
    {
        c++;
    }

正如其他人评论的那样,查找 std::isupper 以了解字母是否为大写字母,并查找 std::count, std::count_if 以计算值的出现次数或条件为真的次数。

此外,main 应该返回 intiscapital 应该返回 bool。使用int 表示真或假值已过时,不应在新代码中使用。最后,考虑使用std::string 而不是char []。使用字符数组来表示字符串是 C 的做事方式。 C++ 使用std::string 有很多微妙的问题。

【讨论】:

  • 非常感谢您,我会查找 std::isupper 我以前不知道的,
  • 这很愚蠢...'使用int来表示真假值已经过时了...'。bool的唯一优势是代码的语义含义。如果另一个开发人员阅读您的代码并看到返回类型为 bool,他会立即明白它返回的是真值。就是这样..
  • @ReznicencuBogdan 使用 int 表示布尔值是在 C99 之前的 C 中完成的,当时没有 bool 类型。是否存在使用int 而不是bool 来表示C++ 中函数的布尔结果的情况?
【解决方案3】:

更正您的代码:

  • IsCapital() 应该返回布尔值而不是整数。

  • for (int i=0; i&lt;=len; i++) 这也是你使用的 [len] 所以更正它:

for (int i = 0; i &lt;len; i++)

  • 这是什么if (iscapital) { c++;}?这不是如何调用函数isCapital来调用它添加()和参数。

  • 使if(iscapital) 在循环内部而不是外部,并且您知道,只要您不添加括号,此处的循环只有一个语句。

所以代码看起来像:

bool iscapital(char x)
{
    if (x >= 'A' && x <= 'Z')
        return 1;
    else
        return 0;
}

main()
{
    char a[20];
    int len;
    int c = 0;

    cout << "enter your line: ";
    cin >> a;
    len = strlen(a);

    for(int i = 0; i < len; i++)
    {
        if (iscapital(a[i]))
            c++;
    }

    cout << "capital letter in string is: " << c;

    return 0;
}

【讨论】:

  • c++ 说应该有一个' int main(int argc , char ** ....) .....' 。只是“主要”是模棱两可的......
  • ' IsCapital() 应该返回一个布尔值而不是一个整数。 ' .不一定……你们怎么都写了这个? .标准允许使用 int 返回一个 bool 值,和一个 bool 返回一个 int(强制转换)。
  • @AntonVignoli:我不一定,但只要它只返回true或false,那么正确的返回类型是bool,如果还有一个不是2的值,那么一个整数就可以了
  • @IbraOpEd 是的,您可以返回 1 或 0,因为它会在编译时转换为 true 或 false,但是为了便于阅读,您应该使用 return true 或 false,而不是 return 1 或 return 0。
猜你喜欢
  • 2020-01-04
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多