标题:一个小问题 谁能帮帮我啊
只看楼主
chuexuezhe
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-27
 问题点数:0 回复次数:8 
一个小问题 谁能帮帮我啊
main()
{
    char st[20],cs[5][20];
    int i,j,p;
    printf("input country's name:\n");
    for(i=0;i<5;i++)
      gets(cs[i]);
    printf("\n");
    for(i=0;i<5;i++)
      { p=i;strcpy(st,cs[i]);
    for(j=i+1;j<5;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");
}

麻烦哪位大哥告诉我下if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}

底下这样做不是把前面的st给覆盖了 那上面的循环工作不是白做了吗
  if(p!=i)
      {
    strcpy(st,cs[i])

或者麻烦哪位大哥帮我写下这个程序的过程吧 我都已经想了1夜了没琢磨出来

if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
 if(p!=i)
      {
    strcpy(st,cs[i]);   这样的话 上面的j的循环 不是白做了吗 又被底下的cs[i]给覆盖了


这是书上写的题本题编程思路如下:五个国家名应由一个二维字符数组来处理。然而C语言规定可以把一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序,输出结果即可。
编程如下:
main()
{
    char st[20],cs[5][20];
    int i,j,p;
    printf("input country's name:\n");
    for(i=0;i<5;i++)
      gets(cs[i]);
    printf("\n");
    for(i=0;i<5;i++)
      { p=i;strcpy(st,cs[i]);
    for(j=i+1;j<5;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");
}

我主要就是卡到if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
    if(p!=i)
      {
    strcpy(st,cs[i]);这里了 因为st已经被赋值了 下面的cs[i]又给st赋值 那前面的循环不是白做了吗
我分别输入的是 shanghai  beijing wuhai  sichuan xinjiang

[[it] 本帖最后由 chuexuezhe 于 2008-9-27 09:42 编辑 [/it]]
搜索更多相关主题的帖子: 一个小问题 
2008-09-27 09:27
hxlou520
Rank: 1
来 自:中國_廈門
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-8-29
得分:0 
你的題目主要想實現什麼功能啊?

只要我用心,沒有不成功.
在學習中不斷失敗,必然是提高自己的一種手段.
2008-09-27 09:33
chuexuezhe
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-27
得分:0 
大哥在帮忙看下吧 我比较着急 想了好久没想明白
2008-09-27 09:40
hxlou520
Rank: 1
来 自:中國_廈門
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-8-29
得分:0 
可是你這個程序可以運行成功啊~~ 你是不是忘記加入頭文件了~

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
    char st[20],cs[5][20];
    int i,j,p;
    printf("input country's name:\n");
    for(i=0;i<5;i++)
      gets(cs[i]);
    printf("\n");
    for(i=0;i<5;i++)
    {
        p=i;
        strcpy(st,cs[i]);
        for(j=i+1;j<5;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");
    system("pause");
    return 0;
}

[[it] 本帖最后由 hxlou520 于 2008-9-27 09:50 编辑 [/it]]

只要我用心,沒有不成功.
在學習中不斷失敗,必然是提高自己的一種手段.
2008-09-27 09:47
chuexuezhe
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-27
得分:0 
当然书上没写 我自己已经加了 我就是想明白我所说的那些问题 大哥能帮我指下路吗
2008-09-27 09:55
hxlou520
Rank: 1
来 自:中國_廈門
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-8-29
得分:0 
我主要就是卡到if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
    if(p!=i)
      {
    strcpy(st,cs[i]);这里了 因为st已经被赋值了 下面的cs[i]又给st赋值 那前面的循环不是白做了吗
我分别输入的是 shanghai  beijing wuhai  sichuan xinjiang


因為第一層進來是把i下標變量賦給p,把cs[i]字符串數組的第一個元素拷貝到st字符串數組中,然後進入第二層判斷比較if(strcmp(cs[j],st)<0),如果小於st就交換。。第二層是把第一層也代替了~
如果第二層5次都完了,然後又進行第一層,可是這樣就重新賦值了~

所以沒有關係~

有可能我說的比較亂~   供參考~

只要我用心,沒有不成功.
在學習中不斷失敗,必然是提高自己的一種手段.
2008-09-27 09:58
chuexuezhe
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-27
得分:0 
可是這樣就重新賦值了~ 是啊 我的意思就是这个 他这样做基本没意义啊 因为测试过来 beijing是最小的字符串 而a[i] 等于我输入的shanghai 这样~~
2008-09-27 10:03
w0nfer
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-9-4
得分:0 
书上的确做得有点复杂了
2008-09-27 10:36
J_j
Rank: 1
等 级:新手上路
威 望:1
帖 子:100
专家分:0
注 册:2008-8-21
得分:0 
首先得知道,st是中间变量,是用来零时存储较小的字符串,
      if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}这里是选出小的字符串,存在st里面
    if(p!=i)(从这里开始,是做排序,st就是起到了一个中间变量的角色!这是很常用的排序思想,建议楼主结合数组的排序来理解)
      {
    strcpy(st,cs[i]);
    strcpy(cs[i],cs[p]);
    strcpy(cs[p],st);
      }
2008-09-27 13:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-235440-1-1.html




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

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