设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1401|回复: 3
打印 上一主题 下一主题

[已经解决] 这里能问C++的问题吗……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2014-9-26
帖子
24
跳转到指定楼层
1
发表于 2014-11-2 15:58:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如题...本人数据结构的作业不会做了...
按照自己推算过一遍感觉没有错误,编译也没出错的代码
  1. void ChirlStr(SEQSTRING T)                                        //求子串//for后面内容没有执行
  2. {
  3.         int len=T.len;
  4.         for(int i=0;(len-i)==1;i++)            //整数i为子串长度
  5.         {       
  6.                 for(int x=0,j=i;x>len-1;x++)        
  7.                 {        cout<<T.ch[x];
  8.                         if (j==0)
  9.                         {
  10.                                 cout<<endl;
  11.                                 j=i;
  12.                                 x=x-i;
  13.                         }
  14.                         else
  15.                                 j--;
  16.                 }
  17.         }
  18.         cout<<"除此以外还有一个“”空串"<<endl;
  19. }
  20. SEQSTRING ContectStr(SEQSTRING T1,SEQSTRING T2)                        //连接两个串
  21. {                                                                                                                //T2和T1的混乱?
  22.         int len1=T1.len;
  23.         int x=0;
  24.         T.len=0;
  25.         for(int i = 0;i==len1;)
  26.         {
  27.                 T.ch[i]=T1.ch[i];
  28.                 i++;
  29.                 x = i;
  30.                 cout<<len1<<"\t";
  31.                 cout<<"i="<<i<<"\t";
  32.                 cout<<"x="<<x<<"\t";
  33.         }
  34.         cout<<T.ch<<endl;                            //将T1赋值给T后输出T的值,实际上输出了T2?
  35.         cout<<"T.len="<<x<<endl;
  36.         for(int len2=i+1;len2==T2.len;len2++)
  37.         {
  38.                 T.ch[i]=T2.ch[len2];
  39.                 i++;
  40.         }
  41.         T.len=T1.len+T2.len;
  42.         return T;
  43. }
  44. int ppStr(SEQSTRING T1,SEQSTRING T2)                //判断T2是否在T1中//假设T1为123,T2为1,输出匹配不能?
  45. {
  46.         int len=T1.len,len2=T2.len;
  47.         int x;
  48.         if (len2>len) return (0);
  49.         for(int i=0;i>(len-len2);i++)                                //j为T中的起始位,j>(len-i)即T1中已经找不到其他长度与T2相等的子串
  50.         {
  51.                 for(x=0;x==len2;x++)
  52.                 {        if (T2.ch[x]!=T1.ch[i+x]) x=len2-1;
  53.                         else if (x==(len2-1)) return (1);
  54.                 }
  55.         }
  56.         return (0);
  57. }
复制代码
  1. #include<iostream.h>
  2.         
  3. #define MAXSIZE 80
  4. typedef struct
  5. {char ch[MAXSIZE];
  6. int len;
  7. }SEQSTRING;

  8. SEQSTRING S,T1,T2,T;

  9. SEQSTRING InputStr()                //输入字符串
  10. { int i;
  11.    T.len=0;
  12.    cout<<"请输入字符串:"<<endl;
  13.    cin>>T.ch;
  14.    for(i=0;T.ch[i]!='\0';i++)
  15.    { T.len++;
  16.    cout<<T.ch[i]<<" ";
  17.    
  18.    }
  19.    cout<<endl;
  20.    return T;
  21.   }
  22. void OutputStr(SEQSTRING T)      //输出字符串
  23.   { cout<<T.ch<<endl;
  24.   }

  25. int LenStr(SEQSTRING T)                      //求字符串长度
  26. { return (T.len);
  27.   }

  28. int EqualStr(SEQSTRING T1,SEQSTRING T2)  //判字符串是否相等
  29. {int i=0;
  30. if(T1.len!=T2.len)
  31.     return(0);
  32. else
  33.    for(i=0;i<T1.len;i++)
  34.      if (T1.ch[i]!=T2.ch[i])
  35.      return(0);
  36.      else
  37.      return(1);
  38. }
  39. void ChirlStr(SEQSTRING T)                                        //求子串//for后面内容没有执行
  40. {
  41.         int len=T.len;
  42.         for(int i=0;(len-i)==1;i++)            //整数i为子串长度
  43.         {       
  44.                 for(int x=0,j=i;x>len-1;x++)        
  45.                 {        cout<<T.ch[x];
  46.                         if (j==0)
  47.                         {
  48.                                 cout<<endl;
  49.                                 j=i;
  50.                                 x=x-i;
  51.                         }
  52.                         else
  53.                                 j--;
  54.                 }
  55.         }
  56.         cout<<"除此以外还有一个“”空串"<<endl;
  57. }
  58. SEQSTRING ContectStr(SEQSTRING T1,SEQSTRING T2)                        //连接两个串
  59. {                                                                                                                //T2和T1的混乱?
  60.         int len1=T1.len;
  61.         int x=0;
  62.         T.len=0;
  63.         for(int i = 0;i==len1;)
  64.         {
  65.                 T.ch[i]=T1.ch[i];
  66.                 i++;
  67.                 x = i;
  68.                 cout<<len1<<"\t";
  69.                 cout<<"i="<<i<<"\t";
  70.                 cout<<"x="<<x<<"\t";
  71.         }
  72.         cout<<T.ch<<endl;                            //将T1赋值给T后输出T的值,实际上输出了T2?
  73.         cout<<"T.len="<<x<<endl;
  74.         for(int len2=i+1;len2==T2.len;len2++)
  75.         {
  76.                 T.ch[i]=T2.ch[len2];
  77.                 i++;
  78.         }
  79.         T.len=T1.len+T2.len;
  80.         return T;
  81. }
  82. int ppStr(SEQSTRING T1,SEQSTRING T2)                //判断T2是否在T1中//假设T1为123,T2为1,输出匹配不能?
  83. {
  84.         int len=T1.len,len2=T2.len;
  85.         int x;
  86.         if (len2>len) return (0);
  87.         for(int i=0;i>(len-len2);i++)                                //j为T中的起始位,j>(len-i)即T1中已经找不到其他长度与T2相等的子串
  88.         {
  89.                 for(x=0;x==len2;x++)
  90.                 {        if (T2.ch[x]!=T1.ch[i+x]) x=len2-1;
  91.                         else if (x==(len2-1)) return (1);
  92.                 }
  93.         }
  94.         return (0);
  95. }
  96. SEQSTRING CRSTR(SEQSTRING T1,SEQSTRING T2)
  97. {
  98.         return T1;
  99. }
  100. void main()                                    //主函数
  101. { int i=0,j=1,len=0,l;
  102.   int ch1;
  103.   S.len=0;
  104.   T1.len=0;
  105.   T2.len=0;
  106. while(1)
  107.    {cout<<"\t\t\t            串子系统\n"<<endl;
  108.     cout<<"\t\t**********************************"<<endl;
  109.     cout<<"\t\t*         1------输入串               *"<<endl;
  110.     cout<<"\t\t*         2------求串长               *"<<endl;
  111.     cout<<"\t\t*         3------串比较               *"<<endl;
  112.     cout<<"\t\t*         4------求子串               *"<<endl;
  113.     cout<<"\t\t*         5------联接串               *"<<endl;
  114.     cout<<"\t\t*         6------串匹配               *"<<endl;
  115.     cout<<"\t\t*         7------插入串               *"<<endl;
  116.     cout<<"\t\t*         8------删除串               *"<<endl;
  117.     cout<<"\t\t*         9------显示串               *"<<endl;
  118.     cout<<"\t\t*         0------返  回               *"<<endl;
  119.     cout<<"\t\t**********************************\n"<<endl;
  120.     cout<<"\t 请输入选项序号(0--9)!"<<endl;
  121.     cin>>ch1;
  122.        
  123.         switch(ch1)

  124.     {
  125.         case 1: S=InputStr();break;
  126.         case 2: len=LenStr(S);cout<<len<<endl;break;
  127.         case 3:
  128.                 {        T1=InputStr();
  129.        T2=InputStr();
  130.        l=EqualStr(T1,T2);
  131.      if(l) cout<<"串1与串2相等!"<<endl;
  132.       else  cout<<"串1与串2不等!"<<endl;
  133.           break;
  134.                 }
  135.         case 4:
  136.                 {
  137.                         S=InputStr();
  138.                         ChirlStr(S);
  139.                         break;
  140.                 }
  141.         case 5:
  142.                 {
  143.                         T1=InputStr();
  144.                         T2=InputStr();
  145.                         T=ContectStr(T1,T2);
  146.                         OutputStr(T);
  147.                         break;
  148.                 }
  149.         case 6:
  150.                 {T1=InputStr();
  151.                 T2=InputStr();
  152.                 l=ppStr(T1,T2);
  153.                 if(l) cout<<"匹配成功"<<endl;
  154.                  else  cout<<"匹配失败"<<endl;
  155.                 break;
  156.                 }
  157.         }

  158.    if(ch1==0) break;

  159. }
  160. }
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2014-9-26
帖子
24
2
 楼主| 发表于 2014-11-2 16:04:16 | 只看该作者
本帖最后由 繁星千羽 于 2014-11-2 16:12 编辑

这里是出现的问题。
④求所有子串。
输入123
输出以下内容
1 2 3
除此以外还有一个“”空串
⑤链接两个串
输入123
输入456
输出以下内容
1 2 3
4 5 6
456
T.len=0
456
⑥串匹配
输入123
输入1
输出以下内容
1 2 3
1
匹配失败


我自己的感觉的话……好像是for里面的语句都没被执行,但是原因完全不知道
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2014-9-26
帖子
24
3
 楼主| 发表于 2014-11-2 16:29:07 | 只看该作者
好像自己解决了……for里面应该是符合才执行……OTZ
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2014-11-2 17:53:14 | 只看该作者
既然问题解决了,我就说点题外话吧。
LZ现在做的是C++中只含C语言的部分(除了cout这货之外和C没什么区别)。所以说你学的还不是真正的C++,真正的C++是不会这样编写数据结构的。不过把C语言练好也是一个基本功吧。
C++里面的for语句是标准化循环语句,执行到它时,它先执行第一部分的内容,然后去判断第二部分成立与否,机制类似于while。做完这两步之后才是真正想循环体。每次循环结束后,自动执行for头部第三部分内容,然后判断第二部分成立与否,执行循环体……
注意,如果for循环体不加花括号的话,只会循环它后面的第一句。
CPP 代码复制
  1. for(int i=0;i<forever;i++)
  2.     cout << "I love you.\n";

↑(女神用一个分号就拒绝了他)
上面例子表明,即使for循环真的是只有一句话,也不妨用花括号括起来(雾)

还有就是发现几个不合理的地方:
1.include<iostream>和include<iostream.h>这两个哪个可以?我印象中貌似是第一个。
2.不要随便用全局变量,否则你很容易忘记这个变量到底是什么。
3.主函数建议声明成int main,虽然void main 也可以过,不过有人说它是过时的写法?
4.case:后面可以不跟{},但是break一般情况下要有。
5.建议使用匈牙利命名法,增加可读性。

点评

注意C++和C的区别,C能过去的地方C++未必  发表于 2014-11-4 19:36
= =我说5打错了-_-||  发表于 2014-11-4 15:55
1.#include<stdio.h>是C写法.3.int main教材常见,void main在C-Free编译会出错,貌似C编程员喜欢直接main()?——在学C我会乱说?2很赞.4是神马?  发表于 2014-11-4 15:54
大触果然不是那么好当,好强啊!  发表于 2014-11-3 19:16
不写的话,cout表示没有存在感  发表于 2014-11-2 20:25
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 07:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表