如何将字符串转换为标题大小写?

时间:2021-03-06 11:39:43

标签: c++ string

我正在尝试构建一个标题大小写函数,它接受一个字符串,并以标题大小写形式返回字符串。

基本上,我的想法是手动将字符串的第一个字符大写,然后通过检查字符前是否有“空格”来完成剩下的工作。

到目前为止,这是我的努力。

string Title_Case(const string A) {
  char First_capital = static_cast<int>(A[0]) - 32;
  string B;
  B[0] = First_capital;

  for (int i = 1; i < A.size(); i++) {
    if (A[i - 1] == ' ' && A[i] >= 'a' && A[i] <= 'z') {
      char capital = A[i] - ('a' - 'A');
      B += capital;
      continue;
    } else
      B = B + A[i];
  }

  return B;
}

2 个答案:

答案 0 :(得分:0)

@QuatCoder 的回答是正确的。即使 B 字符串的长度为零,您也正在访问 B[0]。

但是@Meharjeet Singh:你的函数没有处理边缘条件。

上述函数的前置条件:

  1. 输入字符串参数的第一个字母始终是小写字母。
  2. 输入字符串参数的第一个字母不是空格。

边缘条件已在以下函数中处理

string Title_Case(const string A) {
    
    string B = "";

    int pos = 0;
    int pre_pos = 0;

    pos = A.find(' ', pre_pos);

    while (pos != string::npos)
    {
        string sub = "";

        sub = A.substr(pre_pos, (pos - pre_pos));

        if (pre_pos != pos)
        {
            sub = A.substr(pre_pos, (pos - pre_pos));
        }
        else 
        {
            sub = A.substr(pre_pos, 1);
        }
        
        sub[0] = toupper(sub[0]);
        B += sub + A[pos];

        if (pos < (A.length() - 1))
        {
            pre_pos = (pos + 1);
        }
        else
        {
            pre_pos = pos;
            break;
        }

        pos = A.find(' ', pre_pos);

    }

    string sub = A.substr(pre_pos, string::npos);
    sub[0] = toupper(sub[0]);
    B += sub;
    
    return B;
}

答案 1 :(得分:-1)

在函数中,字符串 B 是一个空字符串,因此没有 B[0],但是您可以为字符串分配一个字符,因此以下内容应该可以工作

string Title_Case (const string A){
        
        char First_capital = static_cast<int>(A[0]) - 32;
        string B;
        B = First_capital; 
        
        for ( int i =1; i <A.size(); i++){
                if( A[i-1] == ' ' &&  A[i] >= 'a' && A[i] <= 'z'){
                                char capital = A[i] - ( 'a' - 'A');
                                B += capital;
                                continue;
                        }
                else
                        B = B + A[i];
        }
        
        return B;
}
相关问题