【发布时间】:2018-02-11 05:25:42
【问题描述】:
这是我在 Stack Overflow 上的第一篇文章。如果我遗漏了什么,请告诉我,我会尝试添加更多信息。
下面的函数应该只使用指针操作而不是数组操作,作为赋值的一部分。
我在 C 语言中有这个函数,它是一个更大程序的一部分:
void reverseString(char strings[NUM_STRINGS][STRING_LENGTH])
{
int i, j;
char *ptr; //Declare pointer variable.
for (i = 0; i < NUM_STRINGS; i++)
{
ptr = strings[i];
do { //Here, we ignore the null terminators in the char array.
ptr++;
} while (*ptr != '\0');
ptr--; //Iterate the pointer variable once downward.
j = i;
while (strings[j] < ptr) //While loop for reversing the string
{
//printf("ptr: %d\n", ptr);
//printf("strings[j]: %d\n", strings[j]);
char temp = *strings[j];
*strings[j++] = *ptr;
*ptr-- = temp;
}
}
}
它应该做的是接受一个包含 4 个字符串的 2D 字符数组,每个字符串最多包含 32 个字节的文本。然后,它在数组中就地反转每个字符串。比如我输入四个字符串:
你好 世界 好的 早上
它应该然后返回:
olleH 深度学习 杜格 侏儒
但是,最终发生的情况是,只有每个字符串的第一个和最后一个字符被颠倒了。例如:
oellH 多尔W 杜格 呸呸呸
我尝试了不同的解决方案,例如在 while 循环中使用 i 代替 j 或使用前缀 ++ 代替后缀,但没有任何效果。关于我应该寻找什么的任何指示?
谢谢。
【问题讨论】:
-
假设
j为0。然后strings[j]指向“你好”。当你增加j时,strings[j]指向“世界”。那就是问题所在。您有一个指向字符串末尾的字符指针ptr。您需要另一个指向字符串开头的 char 指针。 -
啊啊,非常感谢!你答对了。我添加了第二个指针,而不是使用 strings[j],这一次它工作得很好。再次感谢你!我将使用解决方案编辑我的帖子。
-
干得好!您可以将编辑发布为答案,然后接受它。这是表明问题已解决的首选方法。
-
请注意,如果处理空字符串,
do { ptr++; } while (…)循环将会(或至少可能)遇到重大问题。您跳过了空终止符,并且您不知道在那之后您正在访问什么。你真的很喜欢while (*ptr != '\0') ptr++;——或者使用strlen()。
标签: c arrays string pointers reverse