gpt4 book ai didi

c - 冒泡排序使数组为空

转载 作者:行者123 更新时间:2023-11-30 15:08:42 25 4
gpt4 key购买 nike

我正在尝试对 C 中的字符数组进行排序。我的冒泡排序算法是标准算法,但是当我尝试在使用排序方法后打印数组时,它们似乎是空的。

这是我的指针使用问题吗?

#include <stdio.h>
#include <string.h>

char Gstr1[256];
char Gstr2[256];

void load();
void printArrays();
void sortArray(char *array);

main()
{

load();
printArrays();
sortArray(&Gstr1[0]);
sortArray(&Gstr2[0]);
printf("\n\n");
printArrays();
}

void load()
{
memcpy (Gstr1,"Sed aliquam neque fermentum leo semper sagittis. Curabitur imperdiet, libero vulputate laoreet tristique, magna justo posuere, quis rutrum ligula tortor vitae eros. Phasellus sed dignissim elit, nec dictum ligula. Vivamus ornare ultrices odio eget dictum.",255);

memcpy (Gstr2,"Lorem ipsum dolor si amet, consectetur adipiscing elit. Aenean dapibus libero a convallis sodales. Mauris placerat nisl leo, vitae tincidunt turpis tristique in. Pellentesque vehicula nisl vitae efficitur ornare. Nunc imperdiet sem, in aliquam rhoncus at.",255);
}

void printArrays()
{
printf(Gstr1);
printf("\n\n");
printf(Gstr2);
}

void sortArray(char *array)
{
int i,j;
char temp;

for(i=0;i<(256-1);i++)
for(j=0;j<(256-i-1);j++)
{
if((int)*(array+j)>(int)*(array+(j+1)))
{
temp=*(array+j);
*(array+j)=*(array+(j+1));
*(array+(j+1))=temp;
}
}
}

最佳答案

这是因为字符串长度。第一个字符串的长度是 256,第二个字符串的长度是 257,并且您没有处理“\0”字符。因此,建议使用 memcpy_s() 而不是 memcpy(),并且使用 strlen() 而不是在 for 循环中硬编码数组大小。但是,通过对 for 循环限制进行细微修正,以下代码会生成输出。

代码:

#include <stdio.h>
#include <string.h>

char Gstr1[256];
char Gstr2[256];

void load();
void printArrays();
void sortArray(char *array);

main()
{

load();
printArrays();
sortArray(&Gstr1[0]);
sortArray(&Gstr2[0]);
printf("\n\n");
printArrays();
}

void load()
{
memcpy (Gstr1,"Sed aliquam neque fermentum leo semper sagittis. Curabitur imperdiet, libero vulputate laoreet tristique, magna justo posuere, quis rutrum ligula tortor vitae eros. Phasellus sed dignissim elit, nec dictum ligula. Vivamus ornare ultrices odio eget dictum.",255);

memcpy (Gstr2,"Lorem ipsum dolor si amet, consectetur adipiscing elit. Aenean dapibus libero a convallis sodales. Mauris placerat nisl leo, vitae tincidunt turpis tristique in. Pellentesque vehicula nisl vitae efficitur ornare. Nunc imperdiet sem, in aliquam rhoncus at.",255);
}

void printArrays()
{
printf(Gstr1);
printf("\n\n");
printf(Gstr2);
}

void sortArray(char *array)
{
int i,j;
char temp;

for(i=0;i<strlen(array);i++)
for(j=0;j<(strlen(array)-i-1);j++)
{
if((int)*(array+j)>(int)*(array+(j+1)))
{
temp=*(array+j);
*(array+j)=*(array+(j+1));
*(array+(j+1))=temp;
}
}
}

关于c - 冒泡排序使数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177024/

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