面试问题是编写一个名为revstr
的函数,该函数可以使用字符串并将其反转而不使用缓冲字符串,即涉及指针。我该怎么做?
答案 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;
}