标题:利用指针进行字符串大小比较出现的问题
只看楼主
q510578
Rank: 2
等 级:论坛游民
帖 子:86
专家分:30
注 册:2012-2-29
结帖率:92.31%
已结贴  问题点数:40 回复次数:9 
利用指针进行字符串大小比较出现的问题
#include <stdio.h>

void sort(char *str1,char *str2,char *str3);//字符串大小比较的函数
void copyarray(char *strsrc,char* strdet);//字符串赋值的函数
int main()
{
    char str1[255],str2[255],str3[255];
    printf("please input string:");
    scanf("%s%s%s",str1,str2,str3);
    sort(str1,str2,str3);//调用字符串大小比较的函数

    printf("min:%s\nmiddle:%s\nmax:%s\n",str1,str2,str3);//将字符串按从小到大输出
   
    return 0;
}

void sort(char *str1,char *str2,char *str3)    //字符串大小比较函数的函数体,利用指针来进行对字符数组的接收                 
{
    int i=0;
    char *str4,*str5,*str6;//三个字符指针,存放字符串首地址,str4存放最大的,str6存放最小的,str5为中间的
    for(i=0;;i++)//for循环,从字符串的第一个字符开始比较
    {
        if(str1[i]>str2[i])
         if(str2[i]>str3[i])
         {
          str4=str1;
          str5=str2;
          str6=str3;
          break;
         }
         else if(str1[i]>str3[i])
         {
          str4=str1;
          str5=str3;
          str6=str2;
          break;     
         }
         else
         {
          str4=str3;
          str5=str1;
          str6=str2;
          break;     
         }
         else if(str1[i]>str3[i])
         {
          str4=str2;
          str5=str1;
          str6=str3;
          break;     
         }
         else if(str2[i]>str3[i])
         {
          str4=str2;
          str5=str3;
          str6=str1;
          break;     
         }
         else
         {
          str4=str3;
          str5=str2;
          str6=str1;
          break;     
         }
    }
     copyarray(str6,str1);//调用字符串复制函数将最小的字符串拷贝给str1;
     copyarray(str5,str2);//将中间的字符串拷贝给str2
     copyarray(str4,str3);//将最大的字符串拷贝给str3;
    printf("min:%s\nmiddle:%s\nmax:%s\n",str6,str5,str4);
}
void copyarray(char *strsrc,char *strdst)//复制函数,strsrc为要复制的,strdst为接收复制内容的
{
      int i=0;
      for(i=0;;i++)
      {
       strdst[i]=strsrc[i];
       if(strsrc[i]=='\0')//到达字符串最后拷贝结束
       {
        break;                  
       }            

 }  
我的问题是:

    分别输入:ooo  aaa  bbb ,那么经过比较之后str4="ooo",str5="bbb",str6="aaa"然而当跳出那个比较大小的循环后,str4=str6="aaa"了;


    请问如何解决该问题?谢谢你们
搜索更多相关主题的帖子: 字符串 please include void 
2012-10-31 16:26
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
得分:8 
你的比较是不是问题啊,如果你的输入字符里面包含不同的字母的话,你写的代码貌似就没有用了吧。如果你之比较首字母的话,你写的比较也太麻烦了,不知道你的要求是什么? 一般不是就要求之比较首字母的大小码?

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-10-31 17:34
q510578
Rank: 2
等 级:论坛游民
帖 子:86
专家分:30
注 册:2012-2-29
得分:0 
回复 2楼 一个孩子
当首字母相等时就开始比较第二个字母,第二个字母相等时就比较第三个字母。

for循环会做这些的啊

与你我希望相处的快乐,你有不快可以向我发泄。
2012-10-31 18:32
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
得分:8 
我表示问题很严重
strcmp
语法:

 


  #include <string.h>
  int strcmp( const char *str1, const char *str2 );
 

功能:比较字符串str1 and str2, 返回值如下:

返回值
 解释
 
less than 0
 str1 is less than str2
 
equal to 0
 str1 is equal to str2
 
greater than 0
 str1 is greater than str2
 

例如:

    printf( "Enter your name: " );
    scanf( "%s", name );
    if( strcmp( name, "Mary" ) == 0 )
      printf( "Hello, Dr. Mary!\n" );


WE GO
2012-10-31 19:42
a635958000
Rank: 4
等 级:业余侠客
帖 子:55
专家分:253
注 册:2012-10-26
得分:8 
void sort(char *str1,char *str2,char *str3),在你的这个函数中,假如你输入的是ooo aaa bbb
你经过比较转换后,其中指针str1和str4都指向了ooo存储位置的首地址,同样的str2与str6指向了aaa
的首地址,str3和str5指向了bbb的首地址,因此你在进行复制的时候在str1中写入aaa后,原来存入的ooo就被覆盖了,因此输出不了ooo
你应该直接在void sort(char *str1,char *str2,char *str3)中输出,如下
#include <stdio.h>

void sort(char *str1,char *str2,char *str3);//字符串大小比较的函数
//void copyarray(char *strsrc,char* strdet);//字符串赋值的函数
int main()
{
    char str1[255],str2[255],str3[255];
    printf("please input string:");
    scanf("%s%s%s",str1,str2,str3);
    sort(str1,str2,str3);//调用字符串大小比较的函数

   // printf("min:%s\nmiddle:%s\nmax:%s\n",str1,str2,str3);//将字符串按从小到大输出
   
    return 0;
}

void sort(char *str1,char *str2,char *str3)    //字符串大小比较函数的函数体,利用指针来进行对字符数组的接收                 
{
    int i=0;
    char *str4,*str5,*str6;//三个字符指针,存放字符串首地址,str4存放最大的,str6存放最小的,str5为中间的
    for(i=0;;i++)//for循环,从字符串的第一个字符开始比较
    {
        if(str1[i]>str2[i])
        {
            if(str2[i]>str3[i])
            {
              str4=str1;
              str5=str2;
              str6=str3;
              break;
            }
           else
              if(str1[i]>str3[i])
              {
                str4=str1;
                str5=str3;
                str6=str2;
                break;     
              }
              else
              {
                 str4=str3;
                 str5=str1;
                 str6=str2;
                 break;     
              }
        }
       else
         {
             if(str1[i]>str3[i])
             {
               str4=str2;
               str5=str1;
               str6=str3;
               break;     
             }
             else
                 if(str2[i]>str3[i])
                 {
                    str4=str2;
                    str5=str3;
                    str6=str1;
                     break;     
                 }
                else
                {
                    str4=str3;
                    str5=str2;
                    str6=str1;
                    break;     
                }
         }
    }
     printf("min:%s\nmiddle:%s\nmax:%s\n",str6,str5,str4);
     str1=str6;
     str2=str5;
     str3=str4;
      printf("min:%s\nmiddle:%s\nmax:%s\n",str1,str2,str3);//将字符串按从小到大输出
     //copyarray(str6,str1);//调用字符串复制函数将最小的字符串拷贝给str1;
    // copyarray(str5,str2);//将中间的字符串拷贝给str2;
    // copyarray(str4,str3);//将最大的字符串拷贝给str3;
  
}
/*void copyarray(char *strsrc,char *strdst)//复制函数,strsrc为要复制的,strdst为接收复制内容的;
{
      int i=0;
      for(i=0;;i++)
      {
       strdst[i]=strsrc[i];
       if(strsrc[i]=='\0')//到达字符串最后拷贝结束
       {
        break;                  
       }  
      }

}  
2012-11-01 09:14
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
得分:8 
5楼正解啊.....厉害.....学习了....
   LZ 如果真想通过交换来得到最大、最小、居中的字符串
  那就得将str4、str5、str6分配空间(有自己独立的空间,那样就不会出现上述问题),再将str1、str2、str3的
  内容赋值给str4、str5、str6,最后再赋值str1、str2、str3......
2012-11-01 10:33
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
得分:8 
还是用string.h库里有的比较函数(strcmp())好一点

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-01 16:09
q510578
Rank: 2
等 级:论坛游民
帖 子:86
专家分:30
注 册:2012-2-29
得分:0 
回复 6楼 爱闹的娃
好的收到

与你我希望相处的快乐,你有不快可以向我发泄。
2012-11-07 20:58
q510578
Rank: 2
等 级:论坛游民
帖 子:86
专家分:30
注 册:2012-2-29
得分:0 
回复 7楼 zxd543
老师不让用

与你我希望相处的快乐,你有不快可以向我发泄。
2012-11-07 20:59
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
得分:0 
回复 9楼 q510578
你们老师好负责呀
不让用就得自己写了

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-07 21:12



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




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

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