void crazyCaps(string& str){
size_t i = 0;
size_t strLength = str.length(); // this line violates the rule as mentioned in the title
while (i < strLength) {
if (i % 2 == 0) {
if (str[i] >= 'A' && str[i] <= 'Z') // this line violates the rule as mentioned in the title
str[i] += 32;
}
else {
if (str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
}
i++;
}
我的意见:&#34;嘿!! THERE&#34;!
我的输出:&#34; hEy !!有&#34!;
我可以在不使用toUpper()和toLower()函数的情况下将字符转换为大写和小写。但是,我还在使用length()和[]。所以我的问题是你如何转换&#34;嘿!!那里&#34!;到了&#34; hEy !!有&#34!;不使用length()或[]和toUpper()或toLower()。
答案 0 :(得分:-1)
str[i]
相当于*(str + i)
。在内部,编译器将str[i]
转换为*(str + i)
。
这意味着,str[i]
= *(str + i)
= i[str]
此外,字符串始终以\0
(空字符)结尾。使用这两个事实,你可以构造这样的东西:
int i = 0
while(*(str + i) != '\0') {
//change the case by adding or subtracting 32
i++;
}
编辑:字符串,我的意思是常规的C字符串而不是std::string