有没有一种方法可以使用指针+变量遍历数组?

时间:2019-09-02 16:42:32

标签: 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[i] < 91) array[i] += 32; // fifth row
    i++;
  }
  return(array);
}

我想做的事情类似于您在第五行中看到的,只是以“第四行”的方式。我想以类似的方式遍历数组,但这给了我一个L值错误。正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

您的代码中需要进行一些更改:

  1. 正如Ingo所说,*array + i是错误的;它应该是*(array + i),相当于array[i]

  2. 我宁愿使用if(array[i] > 96 && array[i] < 123)来增加可读性,而不是检查if(array[i] => 'a' && array[i] <= 'z')。第二if

  3. 我建议您不要更改原始字符串,而是创建另一个字符串并在那里收集新字母:

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;
}