CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

编译怎么有一处syntax error:']'

楼主ratrat()2001-11-09 10:30:52 在 专题开发/技术/项目 / 数据结构与算法 提问

void   Filter(   list<IntArray>&   combs)  
  {  
      list<IntArray>::iterator   iter;  
      for(   iter   =   combs.begin();   iter   !=   combs.end();     )    
      {  
              IntArray&   array   =   *iter;  
              num   =   1;  
              for(   int   i   =   1;   i   <   array.size();   i++   ){  
              for(   int   j   =   1;   j   <   array.size();   j++   )  
                                          if(   array[i]   >   array[j]   )    
                                          {array[]=array[i]   -   array[j];}//好象array[]有问题,不知怎样办?  
              }  
              int   count   =   0;  
              for(   int   i   =   1;   i   <   array.size();   i++   ){  
              for(   int   j   =   1;   j   <   array.size();   j++   )  
                                          if(   array[i]   ==   array[j]   )    
                                              {   break;}  
                                          else  
                                              {   count++;}  
                                      }  
              }  
               
                           
              list<IntArray>::iterator   old_iter;  
              if(   count   !=   10   )   {  
                      old_iter   =   iter;      
                      iter++;  
                      combs.erase(old_iter);  
              }   else   {  
                      iter++;  
              }  
      }  
  }  
  我的意思是:把一数组的大数减去小数,形成另一数组,在另一数组中去掉相同数并统计个数,我不知怎样设另一数组,怎样运用。请指教。 问题点数:150、回复次数:8Top

1 楼ynyn(风林火山)回复于 2001-11-09 10:48:13 得分 30

array[]=array[i]   -   array[j];这一句明显是错误的,你必须给前面的array[]指定一个下标,不能把一个整数赋给给一个整数数组,只能把它赋给数组中的一个元素Top

2 楼ratrat()回复于 2001-11-09 10:52:50 得分 0

那我改成  
  int   k;  
  array[k]=array[i]   -   array[j];  
  其余的不变,对吗?还有其余的错吗?Top

3 楼jason802(小糊涂仙)回复于 2001-11-09 10:54:11 得分 0

同意楼上。  
   
  Top

4 楼jason802(小糊涂仙)回复于 2001-11-09 10:55:04 得分 0

k没有赋值  
   
  还是不正确  
   
  Top

5 楼ydogg(灰毛兔频频)回复于 2001-11-09 10:57:57 得分 120

我不知道你具体的数据结构,简单猜测了一下,随便看看吧  
   
   
  void   Filter(   list<IntArray>&   combs)  
  {  
  IntArray   temp;  
  list   <IntArray>   &lResult;  
  list<IntArray>::iterator   iter;  
  for(   iter   =   combs.begin();   iter   !=   combs.end();iter++)    
  {  
  IntArray&   array   =   *iter;  
  num   =   1;  
  for(   int   i   =   1;   i   <   array.size();   i++   ){  
  for(   int   j   =   1;   j   <   array.size();   j++   )  
  if(   array[i]   >   array[j]   )   {  
  int   d   =   array[i]   -   array[j];  
  //我不知道你的IntArray是什么类型如何操作(应该是stl的东西吧),简单表示一下  
  temp.PushBack(d);  
  }  
  }  
  int   count   =   0;//存放出现相同值之前的长度  
  for(   int   i   =   1;   i   <   temp.size();   i++   ){  
  for(   int   j   =   1;   j   <   temp.size();   j++   ){  
  if(   temp[i]   ==   temp[j]   )    
  break;  
  else  
  count++;  
  }  
  temp.erase(j);  
  }  
  lResult.pushback(temp);  
  }  
  /*list<IntArray>::iterator   old_iter;  
  if(   count   !=   10   )   {   //这是什么判断?  
  old_iter   =   iter;      
  iter++;  
  combs.erase(old_iter);  
  }   else   {  
  iter++;  
  }*/  
  }  
  Top

6 楼ratrat()回复于 2001-11-09 11:06:30 得分 0

if(   count   !=   10   )指新产生数组中如果元素个数不为10则删去此数组;  
  num   =   1;是我笔误应删去;  
  是stl;Top

7 楼ratrat()回复于 2001-11-09 11:27:35 得分 0

谢谢各位,我在网吧,先给分,回去调试,如果有问题再请教大家。Top

8 楼ratrat()回复于 2001-11-09 20:11:38 得分 0

我回去调试有一大堆error,我把程序完整贴出,请麻烦看一下Filter部分错在那里,  
  #include   <iostream>  
  #include   <vector>  
  #include   <list>  
  using   namespace   std;  
   
  typedef   vector<int>   IntArray;  
   
  //   回溯搜索生成组合  
  void   Search(int   m,   int   n,   int   depth,   IntArray&   mark,   IntArray&   L,   list<IntArray>&   result)  
  {  
          if(   depth   ==   n   )   {  
                  result.push_back(L);          
          }   else   {  
                  int   begin;  
                  if(   depth   ==   0   )   {  
                          begin   =   0;  
                  }   else   {  
                          begin   =   L[depth-1];  
                  }  
                  for(   int   i   =   begin;   i   <   m;   i++   )    
                          if(   mark[i]   ==   0   )   {  
                                  mark[i]   =   1;  
                                  L[depth]   =   i   +   1;  
                                  Search(   m,   n,   depth+1,   mark,   L,   result   );  
                                  mark[i]   =   0;  
                          }  
          }  
  }  
   
   
  //   生成从m个数中取出n个数的组合数C(m,n)  
  //   结果在result中返回  
  void   Combination(int   m,   int   n,   list<IntArray>&   result)  
  {                          
          if(   m   <   n   )   return;  
   
          IntArray   mark(m);                     //   用来标记某个数字是否用过了  
           
          for(   int   i=0;   i   <   m;   i++   )   {   //   初始化mark  
                  mark.push_back(0);  
          }  
           
          IntArray   comb(n);             //   存储一组组合数      
          comb.resize(n);  
           
          Search(m,   n,   0,   mark,   comb,   result);  
  }  
   
   
  //   打印组合数  
  void   Print(list<IntArray>&   combs)  
  {  
          cout   <<   "result   is   :   "   <<   endl;  
   
          list<IntArray>::iterator   iter;  
          for(   iter   =   combs.begin();   iter   !=   combs.end();   iter++   )    
          {  
                  IntArray&   array   =   *iter;  
                  for(   int   i   =   0;   i   <   array.size();   i++   )                  
                          cout   <<   array[i]   <<   "   ";  
                  cout   <<   endl;  
          }  
  }  
   
   
   
   
   
  void   Filter(   list<IntArray>&   combs)  
  {  
  IntArray   temp;  
  list   <IntArray>   &lResult;  
  list<IntArray>::iterator   iter;  
  for(   iter   =   combs.begin();   iter   !=   combs.end();iter++)    
  {  
  IntArray&   array   =   *iter;  
  num   =   1;  
  for(   int   i   =   1;   i   <   array.size();   i++   ){  
  for(   int   j   =   1;   j   <   array.size();   j++   )  
  if(   array[i]   >   array[j]   )   {  
  int   d   =   array[i]   -   array[j];  
   
  temp.PushBack(d);  
  }  
  }  
  int   count   =   0;//存放出现相同值之前的长度  
  for(   int   i   =   1;   i   <   temp.size();   i++   ){  
  for(   int   j   =   1;   j   <   temp.size();   j++   ){  
  if(   temp[i]   ==   temp[j]   )    
  break;  
  else  
  count++;  
  }  
  temp.erase(j);  
  }  
  lResult.pushback(temp);  
  }  
  list<IntArray>::iterator   old_iter;  
  if(   count   !=   10   )   {    
  old_iter   =   iter;      
  iter++;  
  combs.erase(old_iter);  
  }   else   {  
  iter++;  
  }  
  }  
   
  int   main()  
  {  
       
          int   m,   n;  
          cout   <<   "input   m   :   ";  
          cin   >>   m;  
          cout   <<   "input   n   :   ";  
          cin   >>   n;          
       
          list<IntArray>   result;  
          Combination(   m,   n,   result   );          
          Filter(     result);  
          Print(   result   );  
          return   0;  
  }   Top

相关问题

  • 编译问题:error C2143: syntax error : missing ';' before 'string'
  • 怎么处理stdafx.h的预编译错误,fatal error C1010????
  • 在编写DLL时为什么如下调用:编译时会提示error C2061: syntax error : identifier '_com_error'
  • 编译后 0 error(s), 226 warning(s) 。。。。。。。。。
  • 预编译头 error C2857 ?
  • 请问是否有这样的预编译语句,让程序编译时报error然后中止编译?
  • 编译出错,fatal error C1010: 请指教!
  • 编译错误:Command line error D2016 : '/ZI' and '/O2'
  • 编译出错:error LNK2001: unresolved external symbol
  • 关于预编译,fatal error C1010

关键词

  • iter
  • combs
  • 数组
  • intarray
  • old
  • array
  • depth
  • erase
  • begin
  • filter

得分解答快速导航

  • 帖主:ratrat
  • ynyn
  • ydogg

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo