荆襄楚樊 发表于 2021-9-28 16:34:39

写一个函数(起泡法),输入10个字符按a-z排序

本帖最后由 荆襄楚樊 于 2021-10-5 10:11 编辑

#include <stdio.h>
#include <string.h>
#define N 10

char str;
void sort(char str[])
{
        int i;
        int j;
        char t;

        for (j = 1; j < N; j++)
        {
                for (i = 0; (i < N - j) && (str != '\0'); i++)
                {
                        if (str > str)
                        {
                                t = str;
                                str = str;
                                str = t;
                        }
                }
        }
}

int main(void)
{
        int i;
        int flag;

        for (flag = 1; flag == 1;)
        {
                printf("输入字符串:\n");
                scanf_s("%s", str);
                if (strlen(str) > N)
                {
                        printf("字符串太长,请重新输入!");
                }
                else
                {
                        flag = 0;
                }
        }

        sort(str);
        printf("字符串排序:\n");

        for (i = 0; i < N; i++)
        {
                printf("%c", str);
        }
        printf("\n");
       
        return 0;
}

/*
在VS2019中输出结果是:
-------------------------
输入字符串:
reputation
-------------------------
未输出
*/

jhq999 发表于 2021-9-28 18:09:11

本帖最后由 jhq999 于 2021-9-28 22:17 编辑

#include <stdio.h>
#include <string.h>
#define N 100

char str;
void sort(char str[])
{
      int i;
      int j;
      char t;
                int flag=0;
      for (j = 1; str; j++)
      {
                flag=0;
                for (i = 1; str; i++)
                {
                        if (str > str)
                        {
                                flag=1;
                              t = str;
                              str = str;
                              str = t;
                        }
                }
                if (!flag)break;
                               
      }
}

int main(void)
{
      int i;
      int flag;

      for (flag = 1; flag == 1;)
      {
                printf("输入字符串:\n");
                scanf("%s", str);
                if (strlen(str) > N)
                {
                        printf("字符串太长,请重新输入!");
                }
                else
                {
                        flag = 0;
                }
      }

      sort(str);
      printf("字符串排序:\n");

      for (i = 0; str; i++)
      {
                printf("%c", str);
      }
      printf("\n");
      
      return 0;
}

荆襄楚樊 发表于 2021-9-28 20:44:56

jhq999 发表于 2021-9-28 18:09


复制你的代码,还是不能输出。

jhq999 发表于 2021-9-28 21:52:13

本帖最后由 jhq999 于 2021-9-28 21:55 编辑

荆襄楚樊 发表于 2021-9-28 20:44
复制你的代码,还是不能输出。

scanf_s("%s", str);换成scanf("%s", str);试试
多问一句你是不是加了_CRT_SECURE_NO_WARNINGS;

荆襄楚樊 发表于 2021-9-28 22:12:55

jhq999 发表于 2021-9-28 21:52
scanf_s("%s", str);换成scanf("%s", str);试试
多问一句你是不是加了_CRT_SECURE_NO_WARNINGS;

换成scanf("%s", str)也不行。
_CRT_SECURE_NO_WARNINGS不知道加在什么地方,你还是把代码改好我复制,才学习C的小白

jhq999 发表于 2021-9-28 22:20:27

没问题啊?

荆襄楚樊 发表于 2021-9-29 10:22:14

本帖最后由 荆襄楚樊 于 2021-9-29 10:33 编辑

jhq999 发表于 2021-9-28 22:20
没问题啊?

你的代码17、21-22行是而我抄书上的是,只是一个在前一个在后,请解释一下。

jhq999 发表于 2021-9-29 10:43:17

本帖最后由 jhq999 于 2021-9-29 10:56 编辑

荆襄楚樊 发表于 2021-9-29 10:22
你的代码17、21-22行是而我抄书上的是,只是一个在前一个在后,请解释一下。

i=1; if (str > str)
i=2;   if (str > str)
。。。。。。。
一直到str='\0'之前,设为max:那么就是if (str > str)

我这个效率不如你贴的,只不过明了点,你的原因还是scantf和scantf_s之间的问题

荆襄楚樊 发表于 2021-9-29 14:31:31

jhq999 发表于 2021-9-29 10:43
我这个效率不如你贴的,只不过明了点,你的原因还是scantf和scantf_s之间的问题

谢谢你这几天的回答,你正确的代码是用的哪个编程软件写出来的。

jhq999 发表于 2021-9-29 14:32:01

荆襄楚樊 发表于 2021-9-29 14:31
谢谢你这几天的回答,你正确的代码是用的哪个编程软件写出来的。

vs2012

荆襄楚樊 发表于 2021-9-29 20:34:31

jhq999 发表于 2021-9-29 14:32
vs2012

谢谢啦!
页: [1]
查看完整版本: 写一个函数(起泡法),输入10个字符按a-z排序