| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3986 人关注过本帖
标题:字符串交换
只看楼主 加入收藏
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
字符串交换
问题:

们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

 输入格式:

输入在第1行中给出N和K(1<=K<N<=100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
输入样例:6 2
best
cat
east
a
free
day
 输出样例:best
a
cat
day
east
free
我的代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


int main(void)
{
  int n,k,i,j;
  char str[100][11];
  scanf("%d %d",&n,&k);
  for(i=0;i<n;i++)
    scanf("%s",str[i]);
  for(i=0;i<k;i++)
  {
    for(j=0;j<n-i;j++)
    {
      if((strcmp(str[j],str[j+1]))>0)
      {
        char *p=(char*)malloc(11);
        strcpy(p,str[j]);
        strcpy(str[j],str[j+1]);
        strcpy(str[j+1],p);
        free(p);
      }
    }
  }
  for(i=0;i<n;i++)
    printf("%s\n",str[i]);
  return 0;
}
交换str[j],str[j+1]的地方好像不对,导致有些情况运行结果错误(没找到例子。。)
是否有别的方法实现交换,是否可以改进以上算法;
欢迎指教!
搜索更多相关主题的帖子: 英文字母 include 字符串 
2014-08-11 11:40
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
晕了,试了好多方法都不行,来个人帮帮忙吧!就这个问题
2014-08-11 12:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
要字符串高效排序不是这样做的

授人以渔,不授人以鱼。
2014-08-11 12:42
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
那该怎么做,求代码,我试了好久还是没找到好方法,改的没信心了
2014-08-11 12:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用指针

授人以渔,不授人以鱼。
2014-08-11 13:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
单纯的交换2个字符串指针(肯定要用指针来交换 而不是改变物理内存实际存放的字符串)

程序代码:
void chswap(char** s1,char** s2)
{
    char* tmp;
    tmp=*s1;
    *s1=*s2;
    *s2=tmp;
}
int main(void)
{
    char* t1="OVER the course of history it has been artists,";
    char* t2="This is a test text.";
    chswap(&t1,&t2);
    printf("\nt1=%s\nt2=%s\n",t1,t2);
    /*  代码测试结果如下
    t1=This is a test text.
    t2=OVER the course of history it has been artists,
    */
    return 0;
}

DO IT YOURSELF !
2014-08-11 15:01
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
char str[100][11];
这句用改么
2014-08-11 16:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 7 楼 三个人
只是提供一个思路  具体代码吗  我觉得用二维数组来实现字符串的一些操作 不怎么好  还是用malloc分配内存的方式好理解一些

DO IT YOURSELF !
2014-08-11 16:03
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
交换我懂了,但是不用2维数组,怎么实现冒泡排序啊
2014-08-11 16:08
三个人
Rank: 2
等 级:论坛游民
帖 子:54
专家分:40
注 册:2014-7-6
收藏
得分:0 
#include<stdio.h>
#include<string.h>


void chswap(char** s1,char** s2)
{
    char* tmp;
    tmp=*s1;
    *s1=*s2;
    *s2=tmp;
}

int main(void)
{
  int n,k,i,j;
  scanf("%d %d",&n,&k);
  char str[n][11];
  for(i=0;i<n;i++)
    scanf("%s",str[i]);
  for(j=0;j<k;j++)
    for(i=0;i<n-j-1;i++)
      if(strcmp(str[i],str[i+1])>0)
        chswap(str[i],str[i+1]);
  for(i=0;i<n;i++)
    printf("%s\n",str[i]);
  return 0;
}
这回对了!!不过我还是不会用malloc实现这个算法。。希望能有代码。。
2014-08-11 16:23
快速回复:字符串交换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013269 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved