是否可以编写一个可以在不使用缓冲区字符串的情况下反转字符串的函数?

时间:2011-03-19 11:54:43

标签: c

  

可能重复:
  How to reverse a string in place in c using pointers?

面试问题是编写一个名为revstr的函数,该函数可以使用字符串并将其反转而不使用缓冲字符串,即涉及指针。我该怎么做?

2 个答案:

答案 0 :(得分:8)

同时从开头和结尾迭代,交换字符。

void revstr(char * str) {
  int right = strlen(str) - 1;
  int left = 0;
  while (left < right) {
    char c = str[right];
    str[right] = str[left];
    str[left] = c;
    ++left;
    --right;
  }
}

您可以选择使用xor技巧进行交换而不使用中间字符:

str[right] ^= str[left];
str[left] ^= str[right];
str[right] ^= str[left];

这是一种纯粹无意义的交换方式 - 使用此构造的唯一原因是人为要求,即不能将字符串数据存储在中间变量中,也不能调用外部函数。

答案 1 :(得分:1)

我认为至少你需要一个char变量来执行交换操作。 你可以使用类似的东西:

char buf[SIZE];
   int i ;
   char swap;
      for ( i = 0 ; i < SIZE / 2; i++){
   swap = buf[i];
   buf[i] = buf[SIZE - i];
   buf[SIZE -i] = swap;
   }