我有一个 C 语言编程作业,要求在不使用 if-else 语句或三元运算符的情况下反转字符串,因此我们必须使用递归和逻辑短路来实现任务。
这是我实现的用于反转给定字符串的函数:
void reverse(char* str, int start, int end)
{
((start >= end) && (return));
char tmp = str[start];
str[start] = str[end];
str[end] = tmp;
reverse(str, start + 1, end - 1);
}
但是,C 编译器会抱怨 return 语句并输出“错误:预期表达式”。
每当 (start >= end) 计算结果为 true 时,我应该如何实现 return 语句?
任何理智的程序员都不会这样做。但现实世界的规则在某些编程课程中似乎并不有效。
您的编译器是正确的,您不能将
return
与逻辑 AND 运算符一起使用。
为此您需要一个表达式,而
return
不是表达式。
你可以做的是调用一个函数。只要有返回值,就是表达式。
如果不允许更改
reverse
函数的签名,则需要引入一个辅助函数:
bool crazy_assignment_helper(char *str, int start, int end)
{
// Assume we are called with valid arguments.
// swap first and last character
char tmp = str[start];
str[start] = str[end];
str[end] = tmp;
// Continue with inner part if we are not done yet.
((start+1) < (end-1)) && reverse(str, start+1, end-1);
}
void reverse(char *str, int start, int end)
{
crazy_assignment_helper(str, start, end)
}
这假设初始调用是使用有效值进行的。
我希望老师事后会告诉你,你永远不应该在工作中的实际项目中使用这样的代码。