Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.6k views
in Technique[技术] by (71.8m points)

Issues with using isalpha() C++

Very much a newbie to C++ here. I'm writing a very simple program that checks to see if a character in a string containing two characters is alphabetical. If a character is alphabetical, I want to replace it with the character '_', however, there seems to be an issue with my if statement and I cannot figure it out for the life of me. I feel like the fix is simple, but cannot think of the answer. Any help would be appreciated.

#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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The issue is that std::isalpha does not return bool, it returns an int -- and it is only guaranteed to return a nonzero value on success.

When you compare:

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

You are implicitly converting true to an integral value (in this case, 1) -- which is not the result that std::isalpha is returning.

You can fix this easily by removing the == true and allowing the int value to be implicitly converted to bool instead:

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

Live Example


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...