【发布时间】:2011-03-19 11:54:42
【问题描述】:
面试问题是编写一个名为revstr 的函数,它可以在不使用缓冲区字符串(即涉及指针)的情况下获取字符串并将其反转。我该怎么做?
【问题讨论】:
-
我的想法是有没有办法以相反的方向读取指针,这将达到目标?
标签: c
面试问题是编写一个名为revstr 的函数,它可以在不使用缓冲区字符串(即涉及指针)的情况下获取字符串并将其反转。我该怎么做?
【问题讨论】:
标签: c
同时从头到尾迭代,交换字符。
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];
这纯粹是一种荒谬的交换方式——使用这种结构的唯一原因是一个人为的要求,即不能将字符串数据存储在中间变量中,也不能调用外部函数。
【讨论】:
left < right,但这是过早的悲观。除非确实需要使代码变慢(例如分析器已将其识别为冷点),否则为什么要使用它?
left 和right 的存储空间比c 的存储空间多。如果您编辑为“愚蠢的异或技巧”,我会给您 +1 ;-p
我认为至少你需要一个 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;
}
【讨论】: