C 有没有使用指针的方法+;遍历数组的变量?
我承认标题可能让人困惑,但我真的不知道用什么更好的方式来表达。代码如下:C 有没有使用指针的方法+;遍历数组的变量?,c,arrays,function,pointers,C,Arrays,Function,Pointers,我承认标题可能让人困惑,但我真的不知道用什么更好的方式来表达。代码如下: 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[
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);
}
char*convertCase(char const*array){
尺寸i=0;
while(数组[i]!='\0'){
if(array[i]>96&&array[i]<123)*array+i-=32;//第四行
else如果(数组[i]>64&&array[i]<91)数组[i]+=32;//第五行
i++;
}
返回(数组);
}
我想做的是类似于你在第五排看到的,只是在“第四排”的方式。我希望以类似的方式遍历数组,但这会给我一个l值错误。正确的方法是什么?您的代码中有一些东西需要更改:
*array+i
是错误的;它应该是*(array+i)
,相当于array[i]
if(array[i]>96&&array[i]<123)
,我更愿意使用if(array[i]=>a'&&array[i]='a'&&array[i]='a'&&array[i]如果优先级错误,则应该是*(array+i)-=32。char const*array
声明指向const chars的指针。您不能修改此array
*array+i
=(*array)+i
所指向的元素,它不是l值。它应该是*(array+i)
,相当于array[i]
如果您描述(根据您的理解)第四行和第五行正在做什么(应该做什么),这将有助于理解您的问题和您的问题。由于操作员的先例,您可能错了,“第四行/第五行是什么?”实际上,所做的并不是您想要/认为它要做的。这与您的问题没有直接关系,但您可以做:if array[i]>='a'而不是使用ASCII值。这将使将来阅读您的代码的人更容易理解。从技术上讲,使用char
文字不是等效的行为,因为C标准不保证字符集是ASCII。因此,尽管您的代码在实现中始终执行大小写反转在ASION的字符集中,数字文字将始终以ASCII格式执行大小写反转,因此请注意其意图。@chux您是对的,我忘记了。已编辑。还添加了('a'-'a')
谢谢您的提醒。为什么不建议更改原始字符串?我想我以前听到过类似的消息,但从未得到过答案question@Impasse正如我所说,根据你的意图,可能是正确的,也可能是不正确的,但我的目的只是让回答者意识到,根据sp,他们不是等同的行为具体化。
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;
}