我需要在c ++中做两个基本功能
bool validMeno(const string& text){
if ()
return DUMMY_BOOL;
}
bool validPriezvisko(const string& text){
return DUMMY_BOOL;
}
如果输入是首字母大写的字符串,则第一个返回true 当所有字符串都是大写时,第二个为真 请帮助我,我是c ++中的noob
答案 0 :(得分:1)
使用标题cctype,这应该可以。
bool validMeno(const string& text){
if (text.size() == 0)
return false;
return isupper(text[0]);
}
bool validPriezvisko(const string& text){
if (text.size() == 0)
return false;
for (std::string::size_type i=0; i<text.size(); ++i)
{
if (islower(text[i]))
return false;
}
return true;
}
编辑:
由于您还想检查仅存储字母字符的字符串,因此您可以使用isalpha
中的cctype
来检查字符。
答案 1 :(得分:0)
为C ++类==
定义了关系运算符std::string
。最好的 touppercase 实现似乎来自Boost字符串算法库(请参阅here),因此我将在我的示例中使用它。这样的事情应该有效:
#include <boost/algorithm/string.hpp>
#include <string>
bool first_n_upper(const std::string & text, size_t n)
{
if (text.empty())
return false;
std::string upper = boost::to_upper_copy(text);
return text.substr(0, n) == upper.substr(0, n);
}
bool validMeno(const std::string & text)
{
return first_n_upper(text, 1);
}
bool validPriezvisko(const std::string & text)
{
return first_n_upper(text, std::string::npos);
}
答案 2 :(得分:0)
您的问题未完全指定。非字母字符应该被视为小写字母还是大写字母?如果它们应被视为大写,您可以使用:
#include <string>
#include <algorithm>
using namespace std;
bool validMeno(const string& text) {
return !text.empty() && isupper(text[0]);
}
bool validPriezvisko(const string& text) {
return !any_of(begin(text), end(text), islower);
}
另一方面,如果非字母字符应被视为小写:
#include <string>
#include <algorithm>
using namespace std;
bool validMeno(const string& text) {
return !text.empty() && !islower(text[0]);
}
bool validPriezvisko(const string& text) {
return all_of(begin(text), end(text), isupper);
}