gpt4 book ai didi

C 交换二维数组中的字符串(不带指针)

转载 作者:行者123 更新时间:2023-11-30 16:36:57 25 4
gpt4 key购买 nike

我编写了一个函数,可以按字符串的长度对字符串数组进行排序

void lenSort(char sen[][NAME_LENGTH], int len)
{
int i = 0, j = 0, k = 0;
char tmp[NAME_LENGTH] = {0};
for(i = 0; i < len - 1; i++)
{
for(j = 0; j < len - i - 1; j++)
{
if(strlen(sen[j]) > strlen(sen[j+1]))
{
strncpy(tmp, sen[j], strlen(sen[j]));
for(k = 0; k < strlen(sen[j]); k++)
{
sen[j][k] = 0;
}
strncpy(sen[j], sen[j+1], strlen(sen[j+1]));
strncpy(sen[j+1], tmp, strlen(tmp));
}
}
}
}

我传递的数组是:{"12345", "123", "123456", "12", "1234", "1234", "1234567", "123", "1", "12345"}由于某种原因,当我将 sen[j+1] 复制到 sen[j] 时,我得到了多余的字符,我认为那是因为 sen[j] code> 更长,但我在复制之前重置了它,但它仍然发生,我不知道为什么..

最佳答案

如果您只想根据字符串的长度对字符串进行排序,则不需要下面的内部 for 循环,尽管它可能有其他用途

for(k = 0; k < strlen(sen[j]); k++)
{
sen[j][k] = 0;
}

这是我的解决方案。使用 strcpy() 而不是 strncpy(),因为使用 strncpy() 复制的字符串不会以 null 结尾。来自 strncpyma​​n 页面警告:如果前n个字节中没有空字节 src 中,放置在 dest 中的字符串不会以 null 结尾。

void lenSort(char sen[][NAME_LENGTH], int len)
{
int i = 0, j = 0, k = 0;
char tmp[NAME_LENGTH] = {0};
for(i = 0; i < len - 1; i++)
{
for(j = 0; j < len - i - 1; j++)
{
if(strlen(sen[j]) > strlen(sen[j+1]))
{
strcpy(tmp, sen[j]);
strcpy(sen[j], sen[j+1]);
strcpy(sen[j+1], tmp);
}
}
}
}

关于C 交换二维数组中的字符串(不带指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239452/

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