首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二位字符数组的排序。解决办法

2013-04-21 
二位字符数组的排序。#include stdafx.h int _tmain(int argc, _TCHAR* argv[]){char c[5][10] {zabd

二位字符数组的排序。


#include "stdafx.h"
 
int _tmain(int argc, _TCHAR* argv[])

    char c[5][10] = {"zabd", "fadkfjdkb", "fadkfjdka", "egaoba", "beyond"};
    int count = sizeof(c) / 10;
 

    for(int i = 0; i < count - 1; i++)
    {
        int k = i;
 
        for(int j = i + 1; j < count; j++)
        {
            if(strcmp(c[i] , c[j]) > 0)
            {
                k = j;
            }
        }
 

        if(i != k)
        {
            char (*str)[10];
str = c[k];
            c[k] = c[i];
            c[i] = str;
        }

    }



    for(int i = 0; i < count; i++)
    {
        printf("%s\n", c[i]);
    }

printf("\ncount = %d\n", count);
    printf("\n");
    system("pause");
    return 0;
}


如上所示,我要把“”中的字符串按照字母顺序排列,但是我这样写不行,应该怎么处理呢?
VS2010环境下。
[解决办法]
void str_sort()

char c[5][10] = {"zabd", "fadkfjdkb", "fadkfjdka", "egaoba", "beyond"};
int count = sizeof(c) / 10;


for(int i = 0; i < count - 1; i++)
{
int k = i;

for(int j = i + 1; j < count; j++)
{
if(strcmp(c[i] , c[j]) > 0)
{
k = j;
}
}


if(i != k)
{
char str[10];
strncpy(str, c[k], 10);
strncpy(c[k], c[i], 10);
strncpy(c[i], str, 10);
}

}



for(int i = 0; i < count; i++)
{
printf("%s\n", c[i]);
}

printf("\ncount = %d\n", count);
printf("\n");
}

beyond
egaoba
fadkfjdka
fadkfjdkb
zabd
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char c[][10] = { "zabd", "fadkfjdkb", "fadkfjdka", "egaoba", "beyond", "meyond", "oeper" };


    int count = sizeof(c) / sizeof(c[0]);

    for (int i = 0; i < count - 1; i++)
    {
        int k = i;
        for (int j = i + 1; j < count; j++)
        {
            if (strcmp(c[k], c[j]) > 0)
            {
                k = j;
            }
}

        if (i != k)
        {
            char str[10];
            strncpy(str, c[k], 10);
            strncpy(c[k], c[i], 10);
            strncpy(c[i], str, 10);
        }
    }

    for (int i = 0; i < count; i++)
    {
        printf("%s\n", c[i]);
    }
    printf("\ncount = %d\n", count);
    printf("\n");

    system("pause");
    return 0;
}


[解决办法]
选择排序的思想就可以实现了:
#include <stdio.h>
#include <string.h>   
int main()
{
    char st[20],cs[10][20];
    int i,j,p;

    printf("分别输入十个英文字符串(以输入键分隔):\n");
    for(i=0;i<10;i++)         //完成输入                  
      gets(cs[i]);
    printf("\n");

printf("按字母顺序从小到大排列:\n");     //选择排序的思想
    for(i=0;i<10;i++)              
 {
       p=i;            //设i位置的是最小元素
   strcpy(st,cs[i]);
    for(j=i+1;j<10;j++) //从剩下的里面取出一个与这个当前的比较大小,如果新取出的元素小,则把这个元素放在假设的最小位置上
      if(strcmp(cs[j],st)<0) 
  {
  p=j;
  strcpy(st,cs[j]);
  }

    if(p!=i)  //如果假设的位置上的元素不是最小的,则交换位置
      {
    strcpy(st,cs[i]);
    strcpy(cs[i],cs[p]);
    strcpy(cs[p],st);
       }

    puts(cs[i]);    //输出          
 }

printf("\n");
}
------解决方案--------------------


char c[][10] = {"zabd", "fadkfjdkb", "fadkfjdka", "egaoba", "beyond", "meyond", "oeper"};
这是程序的另外一个错误

例子中虽然运行正确了,但是如果把c数组改为以下就会运行错误,lz可以try下,看看有没有道理
char c[][3] = {"za", "fb", "fa", "e", "b", "m", "oe"};

正确的如下: 
char *c[] = {"zabd", "fadkfjdkb", "fadkfjdka", "egaoba", "beyond", "meyond", "oeper"};
count = sizeof(c) / sizeof(char *);
[解决办法]
为什么不用qsort函数?

热点排行