c语言得到问题 请逐一解释下吧~

来源:百度知道 编辑:UC知道 时间:2024/06/14 04:32:43
char* EXUL( char tt[] )
{
int isfirst = 1; /*定义整型isfirst用于判断某一字符是否是首字符*/
int i, length;

length = strlen( tt ); /*计算字符数组tt[]的长度*/
for(i = 0; i < length; i++)
{
if (tt[i] >= 'a' && tt[i] <= 'z')
{tt[i] = isfirst?(tt[i] + 'A' - 'a'):tt[i];isfirst=0;} /*如果首字符是小写字母,则把它改成大写*/
else if (tt[i] >= 'A' && tt[i] <= 'Z')
{tt[i] = isfirst?tt[i]:(tt[i] - 'A' + 'a');isfirst=0;} /*其它大写字母改成小写*/
else
isfirst = 1;
}
return tt;

}
这是一个自定义的函数 是把 字符串中的首字母变成大写字母 其余的变成小写 如果输入 ab cD 则输出 Ab Cd
tt[i] = isfirst?(tt[i] + 'A' - 'a'): 是什么意思啊?

依次访问字符,如果是小写,判断isfirst的值,当isfirst=1时,只有前一个字符不是字母的时候,就确定了这个是一个词的第一个字母,然后进行判断,是大写则保持原样,如果是小写就改成大写,同时isfirst=0,判断下一个字,如果下一个还是字符,isfirst依然为0
#########################################
tt[i] = isfirst?(tt[i] + 'A' - 'a'):
三元运算符,如果isfirst是真(1),就将tt[i]变成相应的小写('A'-‘a’是相应的差值,理应是-32)