我承认标题可能会造成混淆,但是我真的不知道有一种更好的方法可以将其表达出来。这是代码:
char * convertCase(char const * array){
size_t i = 0;
while(array[i] != '\0'){
if(array[i] > 96 && array[i] < 123) *array+i -= 32; // fourth row
else if(array[i] > 64 && array[i] < 91) array[i] += 32; // fifth row
i++;
}
return(array);
}
我想做的事情类似于您在第五行中看到的,只是以“第四行”的方式。我想以类似的方式遍历数组,但这给了我一个L值错误。正确的方法是什么?
答案 0 :(得分:2)
您的代码中需要进行一些更改:
正如Ingo所说,*array + i
是错误的;它应该是*(array + i)
,相当于array[i]
我宁愿使用if(array[i] > 96 && array[i] < 123)
来增加可读性,而不是检查if(array[i] => 'a' && array[i] <= 'z')
。第二if
我建议您不要更改原始字符串,而是创建另一个字符串并在那里收集新字母:
char * convertCase(char const * array)
{
size_t len = strlen(array);
char *new_str = (char *) calloc(len + 1, sizeof(char));
for (size_t i = 0; i < len; ++i)
{
if (array[i] >= 'a' && array[i] <= 'z') new_str[i] = array[i] - ('a' - 'A');
else if (array[i] >= 'A' && array[i] <= 'Z') new_str[i] = array[i] + ('a' - 'A');
}
return new_str;
}