c ++中的字符串大写函数

时间:2014-01-21 12:44:28

标签: c++ string function

我需要在c ++中做两个基本功能

bool validMeno(const string& text){
    if ()
    return DUMMY_BOOL;
}

bool validPriezvisko(const string& text){
    return DUMMY_BOOL;
}

如果输入是首字母大写的字符串,则第一个返回true 当所有字符串都是大写时,第二个为真 请帮助我,我是c ++中的noob

3 个答案:

答案 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);
}