Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有使用指针的方法+;遍历数组的变量?_C_Arrays_Function_Pointers - Fatal编程技术网

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值错误。正确的方法是什么?

您的代码中有一些东西需要更改:

  • 正如Ingo所说,
    *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;
    }