回 帖 发 新 帖 刷新版面

主题:问题

#include<iostream>
using namespace std;
int main()
{
    int n=0;
char str[80]="beijing-china2008";
cout<<str<<endl;
while(str[n]!='\0')
str[n++]=str[n]>='a'&&str[n]<='z'?str[n]-'a'+'A':str[n];
cout<<str<<endl;
return 0;
}
为什么结果会等于    
beijing-china2008
BEIJING-CHINA2008
求解

回复列表 (共1个回复)

沙发

str[n++]=str[n]>='a'&&str[n]<='z'?str[n]-'a'+'A':str[n];
这是利用操作符优先级的问题,最高的是运算符,其次是逻辑操作符,接着是?操作符,最后是赋值操作符,所以可以用括号说明:
str[n++]=(((str[n]>='a')&&(str[n]<='z'))?(str[n]-'a'+'A'):str[n]);
意思是当str[n]为小写字母时,?操作符为真,str[n]转换为大写字母,
当str[n]不为小写字母时,?操作符为假,按原str[n]输出

我来回复

您尚未登录,请登录后再回复。点此登录或注册