最近在一次采访中,我被要求编写一个代码来反转一个无界字符串而不检查空字符。我不知道字符串的长度,也不能以任何形式使用任何库函数。
我写了下面的代码(我知道这是不正确的,原因很多,一个是我没有用'\ 0'终止字符串,而是用CTRL + Z或CTRL + D终止它)
while(scanf("%c",arr[i++])!=-1);
for(i--;i>=0;i--)
puts(arr[i]);
可能的算法是什么!!
答案 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终止符。因为,它不是检查,你应该没有条件。