有一部分代码用于“使每个单词的首字母大写”我不明白。 http://www.cplusplus.com/forum/beginner/117463/
std::string str = x;
str [0] = toupper (str[0]);
std::for_each(str.begin()+1, str.end(), printChars);
std::cout << str;
return 0;
}
Void printChars(char& c)
{
if( (*(&c - sizeof(char))) == " ")
c = toupper(c);
}
据我所知,它始终设置第一个写入大写字母的字母,然后检查字符串中的每个字母。
但为什么他会使用if((*(&c - sizeof(char))) == " ")
以及 * ,&amp; 如何将其设置为空白?
答案 0 :(得分:3)
在这种情况下如何工作?
它不起作用。您显示的程序格式不正确,不太可能编译。
Void printChars(char& c)
C ++中没有类型Void
。我怀疑你打算改为写void
。
(some_char_value) == " " // expression simplified by me
您可能无法将字符与字符串文字进行比较。
但为什么他会使用
if((*(&c - sizeof(char))) == " ")
他没有。他使用if( (*(&c - sizeof(char))) == ' ')
。
如何&amp;在这种情况下工作?
是地址运营商。它用于获取指向c
的内存地址的临时指针。
*在这种情况下如何工作?
它是间接运算符。它用于在内存位置&c - 1
获取字符。在str
引用的字符之前c
中的字符。
并在这种情况下将其设置为空白?
他没有在引用的表达式中设置任何内容。 ==
是相等比较运算符。他比较了&c - 1
和字符文字' '
的值。
英语:他测试c
之前的角色是否是空格。换句话说:他测试c
是否是单词的第一个字符。
答案 1 :(得分:0)
此代码执行简单的指针运算。您要问的代码是使用引用运算符&
来获取变量c
的地址。然后执行减去char大小以检查c之前的char是否为空格,如果是,则调用toUpper()
。例如,
如果c的地址是100,那么&c - sizeof(char)
正在检查地址99处的字符,那么*用于取消引用变量,该变量允许使用== " "
来比较变量。