我正在尝试构建一个标题大小写函数,它接受一个字符串,并以标题大小写形式返回字符串。
基本上,我的想法是手动将字符串的第一个字符大写,然后通过检查字符前是否有“空格”来完成剩下的工作。
到目前为止,这是我的努力。
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;
}
答案 0 :(得分:0)
@QuatCoder 的回答是正确的。即使 B 字符串的长度为零,您也正在访问 B[0]。
但是@Meharjeet Singh:你的函数没有处理边缘条件。
上述函数的前置条件:
边缘条件已在以下函数中处理
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;
}