c - 冒泡排序使数组为空

标签 c arrays sorting char bubble-sort

我正在尝试对 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/

相关文章:

c - 如何在 C 中反转按位与 (&)?

python - 要添加到新列表 Python/Django 中的特定元素排序

asp.net-mvc - ASP.NET MVC jquery checkboxlist 帖子?

c - 了解由于 getchar 而导致的 c 循环

java - 在数组中搜索值的总和

javascript - 排序方法的javascript函数中的value1和value 2是什么

c - C 中棘手的指针算术 : **k

c - 我无法理解这段代码结构。有人可以解释如何执行这段代码吗?

c - 内核态和用户态编程有什么区别?

java - 有序数组删除操作——大O分析