在不检查空字符的情况下反转无界字符串

时间:2012-08-09 07:38:00

标签: c string

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


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


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

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

可能的算法是什么!!

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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;
}

答案 2 :(得分: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终止符。因为,它不是检查,你应该没有条件。