1

最近在一次采访中,我被要求编写一个代码来反转无界字符串而不检查空字符。我不知道字符串的长度,也不能以任何形式使用任何库函数..


我编写了以下代码(由于多种原因,我知道这是不正确的,一个是我没有用 '\0' 终止字符串,而是用 CTRL+Z 或 CTRL+D 终止它)


while(scanf("%c",arr[i++])!=-1);

for(i--;i>=0;i--)
     puts(arr[i]);

可能的算法是什么!

4

3 回答 3

3

也许是这样的:

void
reverse_print(const char* string) {
    if (*string == 0) {
       return;
    }
    reverse_print(string + 1);
    putchar(*string);
}

或者,从输入中读取字符串:

void
reverse_print() {
    char c;
    if (1 != scanf("%c", &c)) {
        return;
    }
    reverse_print();
    putchar(c);
}
于 2012-08-09T07:44:10.623 回答
0
#include <stdio.h>

int main(void)
{
  char* string1 = "This is me the right guy!! understood !!!";
  char* string = string1;
  char *nonstring = "\x01\x05\x0a\x15";
  int len = 0;

  while ((*string ^ nonstring[0]) && (*string ^ nonstring[1])
      && (*string ^ nonstring[2]) && (*string ^ nonstring[3])
      && (*string ^ nonstring[4]))
  {
    len++;
    string++;
  }
  //printf("%d\n", len); 
  while(len)
  {
    printf("%c", string1[--len]);
  } 
  return 0;
}
于 2012-08-09T07:56:35.737 回答
0

您似乎正在从输入中读取字符串,并尝试打印它。

您可以只计算字符数,并将其视为普通数组,类似于:

int main() { 
int i = 0;
char arr[256];
while(scanf("%c",arr + (i++))!=-1);
for(i = i-1; i+1; i--) putchar(arr[i]);

return 0;
}

如果数组是完全无界的,你必须确保你没有空间不足,如果你是 - 重新分配它。

完成后,您还可以手动添加 NULL 终止符。因为,它没有检查它,所以你应该对要求没问题。

于 2012-08-09T07:56:57.530 回答