gpt4 book ai didi

c - C 中反转二维字符串集的函数不会反转超过第一个和最后一个字符

转载 作者:行者123 更新时间:2023-12-02 19:27:59 24 4
gpt4 key购买 nike

这是我在 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 个字节的文本。然后,它就地反转数组中的每个字符串。例如,如果我输入四个字符串:

你好世界好的早上起来

它应该返回:

奥勒H德罗杜格克宁罗姆

但是,最终发生的情况是只有每个字符串的第一个和最后一个字符被颠倒。例如:

oellH多尔W杜格戈尔宁

我尝试了不同的解决方案,例如在 while 循环中使用 i 而不是 j 或使用前缀++ 而不是后缀,但还没有任何效果。关于我应该寻找什么的任何指示?

谢谢。

最佳答案

解决方法如下。正如下面我的评论中所述,我添加了一个辅助指针,而不是在循环中使用 strings[j] 。指针现在引用字符串的开头而不是整个字符串数组。

void reverseString(char strings[NUM_STRINGS][STRING_LENGTH])
{
int i, j;
char *ptr; //Declare pointer variable.
char *ptr2;
for (i = 0; i < NUM_STRINGS; i++)
{
ptr = strings[i];
ptr2 = 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 (ptr2 < ptr) //While loop for reversing the string
{
char temp = *ptr2;
*ptr2++ = *ptr;
*ptr-- = temp;
}
}
}

关于c - C 中反转二维字符串集的函数不会反转超过第一个和最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com