首页 > 解决方案 > 使用 isalpha() C++ 的问题

问题描述

这里是 C++ 的新手。我正在编写一个非常简单的程序,用于检查包含两个字符的字符串中的字符是否按字母顺序排列。如果一个字符是按字母顺序排列的,我想用字符“_”替换它,但是,我的 if 语句似乎有问题,我一生都无法弄清楚。我觉得修复很简单,但想不出答案。任何帮助,将不胜感激。

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
   string passCode;

   cin >> passCode;

   if (isalpha(passCode.at(0)) == true){
      passCode.at(0) = '_';
   }
   if (isalpha(passCode.at(1)) == true){
      passCode.at(1) = '_';
   }


   cout << passCode << endl;
   return 0;
}

标签: c++

解决方案


问题是它std::isalpha不返回bool,它返回一个int-- 并且只保证在成功时返回一个非零值。

当你比较时:

if (isalpha(passCode.at(0)) == true)

您正在隐式转换true为整数值(在本例中1为 )——这不是std::isalpha返回的结果。

您可以通过删除== true并允许将int值隐式转换为bool来轻松解决此问题:

if (isalpha(passCode.at(0))){
   passCode.at(0) = '_';
}
if (isalpha(passCode.at(1))){
   passCode.at(1) = '_';
}

Live Example


推荐阅读