问题描述
#include <iostream>
#include <ctype.h>
using namespace std;
int countUpper (char*myString){
bool isupper(char s);
size_t uCount{0};
for(;*myString!='\0';){
myString++; uCount++;
isupper(true);
}
return uCount;
}
int main(){
const char* myString= "Hello there world! How are you today?";
int uCount= countUpper (myString );
cout<<uCount<<"upper case letters in: \""<<myString<<"\""<<endl;
return 0;
}
解决方法
您滥用isupper()
。您已经声明了尚未实现的功能。而且您忽略了该函数的返回值。
改为使用std::isupper()
,例如;
#include <iostream>
#include <cctype>
int countUpper (const char *myString){
size_t uCount{0};
for(; *myString != '\0'; ++myString){
if (std::isupper(static_cast<unsigned char>(*myString)))
++uCount;
}
return uCount;
}
int main(){
const char* myString = "Hello there world! How are you today?";
int uCount = countUpper(myString);
std::cout << uCount << "upper case letters in: \"" << myString << "\"" << std::endl;
return 0;
}
或者:
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
int countUpper (const std::string &myString){
return std::count_if(myString.begin(),myString.end(),[](unsigned char ch){
return std::isupper(ch):
}
);
}
int main(){
const char* myString = "Hello there world! How are you today?";
int uCount = countUpper(myString);
std::cout << uCount << "upper case letters in: \"" << myString << "\"" << std::endl;
return 0;
}