最近在一次采访中,我被要求编写一个代码来反转无界字符串而不检查空字符。我不知道字符串的长度,也不能以任何形式使用任何库函数..
我编写了以下代码(由于多种原因,我知道这是不正确的,一个是我没有用 '\0' 终止字符串,而是用 CTRL+Z 或 CTRL+D 终止它)
while(scanf("%c",arr[i++])!=-1);
for(i--;i>=0;i--)
puts(arr[i]);
可能的算法是什么!
也许是这样的:
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);
}
#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;
}
您似乎正在从输入中读取字符串,并尝试打印它。
您可以只计算字符数,并将其视为普通数组,类似于:
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 终止符。因为,它没有检查它,所以你应该对要求没问题。