注册 登录
编程论坛 数据结构与算法

急急急!!求帮助啊!!

IT飞飞 发布于 2012-09-26 15:12, 539 次点击
#include "stdio.h"
#include "conio.h"
#include"string.h"
#define MAXSIZE 100

typedef  struct
{
    char str[MAXSIZE];
    int length;


}seqstring;
int i,result;

seqstring *s,*s1,*s2;
seqstring *creatstring(seqstring *s)
{
  int i=0;char ch;
  while((ch=getchar())!='\0')  


  {
     s->str[i]=ch;
     i++;
  
  }


   return s;


}

   
  int comparestr(seqstring *s1,seqstring *s2)
  {   
     int i,len;
      
      if(s1->length<s2->length)
          len=s1->length;
       else len=s2->length;


    while(i<len)
     {
        if(s1->str[i]>s2->str[i])
        return (result=1);
         else if(s1->str[i]<s2->str[i]) return (result=-1);
               else
                    s1->str[i]=s2->str[i]; return(result=0);
     
                     i++;
     }
  }

    void main()
    {
     printf("初始化字符串s1");
   
     creatstring(s1);
    printf("初始化字符串s2");
    creatstring(s2);
    comparestr(s1,s2);

    printf("result=%d",result);
      return 0;
    }用数据结构中的传5实现两个字符串的比较 编译的时候没问题 可咋运行不出结果 在win tc下运行的
8 回复
#2
寒风中的细雨2012-09-26 16:22
seqstring *s,*s1,*s2;
空指针不分配内存  就直接拿过来用。。。
  else
                    s1->str[i]=s2->str[i]; return(result=0);
这个else是做什么处理。。。

#3
IT飞飞2012-09-26 22:02
回复 2楼 寒风中的细雨
直接在前面加上S1=(seqstring*)malloc(sizeof(seqstring));
s2=seqstring*)malloc(sizeof(seqstring));就可以吗?
  else那条语句是 如果两个字符串相等 就返回 0;
#4
IT飞飞2012-09-26 22:21
回复 3楼 IT飞飞
#include "stdafx.h"


#include "stdio.h"
#include "conio.h"
#include"string.h"
#include"stdlib.h"
#define MAXSIZE 100

typedef  struct
{
    char str[MAXSIZE];
    int length;


}seqstring;
int i,result;

seqstring *s,*s1,*s2;

seqstring *init_seqstring(seqstring*s)
{
  s=(seqstring*)malloc(sizeof(seqstring));
  return s;
}


seqstring *creatstring(seqstring *s)
{
  int i=0;char ch;
  while((ch=getchar())!='\0')  


  {
     s->str[i]=ch;
     i++;
  
  }


   return s;


}

   
  int comparestr(seqstring *s1,seqstring *s2)
  {   
     int i,len;
      
      if(s1->length<s2->length)
          len=s1->length;
       else len=s2->length;


    while(i<len)
     {
        if(s1->str[i]>s2->str[i])
        return (1);
         else if(s1->str[i]<s2->str[i]) return (-1);
               else
                    s1->str[i]=s2->str[i]; return(0);
     
                     i++;
     }
  }

    void main()
    {int m;
  init_seqstring(s1);

   init_seqstring(s2);
     printf("初始化字符串s1");
   
     creatstring(s1);
    printf("初始化字符串s2");
    creatstring(s2);
   m=comparestr(s1,s2);

    printf("m=%d",m);
      getch();
    }
程序还是不能运行
#5
zhu2240392012-09-26 22:28
while((ch=getchar())!='\0')    这个判断数据输入结束,是没有键来表示的吧

你可以用 ENTER 或者 是空格来表示一个字符串结束

  int comparestr(seqstring *s1,seqstring *s2)   -----------------》函数还回值 这个知识点 希望楼主复习下
  {   
     int i,len;
      
      if(s1->length<s2->length)
          len=s1->length;
       else len=s2->length;


    while(i<len)         ---------》这个函数 请问你想他做什么呢?  如果两个字符串"wo ai"和"wo ai ni"比较会怎么执行,请楼主推敲算法
     {
        if(s1->str[i]>s2->str[i])             ---》result  你都不声明  请问不报错误么
        return (result=1);    ------------------》 return (result=1);更改成 return(1) 你的目的就达到了                          
         else if(s1->str[i]<s2->str[i]) return (result=-1);
               else                                    -------------------------------------》这个地方 if else if   else这部分知识再回头看看
                    s1->str[i]=s2->str[i]; return(result=0);
     
                     i++;
     }
  }

#6
IT飞飞2012-09-26 22:41
回复 5楼 zhu224039
   while(i<len)         ---------》这个函数 请问你想他做什么呢?  如果两个字符串"wo ai"和"wo ai ni"比较会怎么执行,请楼主推敲算法
     先比较两个字符串的长度 然后把短的字符串的长度给len
  你看我后面回的哪个帖子  帮忙找找错误  编译能通过 就是运行的时候有错误  谢谢啊!
#7
zhu2240392012-09-26 23:35
我不帮你找错,你把我那个注解方面的,照着书看看  学习下  自己再想想
return(result=1)  改成  return 1
#8
zhu2240392012-09-26 23:41
while(i<len)         ---------》这个函数 请问你想他做什么呢?  如果两个字符串"wo ai"和"wo ai ni"比较会怎么执行,请楼主推敲


这个会造成你的 数组引用越界  通俗点将 a[10]和b[12] 进行比较   while(i<len)  这个时候 len=12
循环过程中 数组  a  能引用 a[12] 吗?

我给你说的就是这个呀

输入两个字符串  比较两个字符串  只比较字符串  第一个字母 的 ASCII  是这么个意思么


[ 本帖最后由 zhu224039 于 2012-9-26 23:44 编辑 ]
#9
allenz08102012-09-29 10:16
楼主 你的main 是 void 怎么会return 0?
你comparestr 函数 下面的 i 没有给初始值 怎么用?
你的 length 也没有初始值怎么用?至少在你creatstring里面的 for 循环下面  要length++把 然后后面才可以用。
1