CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于字符串组合方法-2

楼主zjy()2000-06-15 12:12:00 在 VC/MFC / 基础类 提问

有个?字符串数组  
  str[0]   =   {"str00","str01",...,"str0m"}  
  str[1]   =   {"str10","str11",...,"str1m"}  
  ...  
  str[n]   =   {"strn0","str2",...,"strnm"}  
   
  有啥简便方法可得到他们的所有组合的结果?  
  newstr[0]   =   str00,str10,...strn0  
  newstr[1]   =   str00,str10,...strn1  
  ...  
  newstr[n+1]   =   str00,str11,...strn0  
  newstr[n+2]   =   str00,str12,...strn0  
  ...  
  问题点数:50、回复次数:6Top

1 楼Kevin_qing()回复于 2000-06-15 13:31:00 得分 0

char   **   str=new   char   [n*m][MAX_LENG];  
  int   i=0;  
  for(int   n=0;n<N;n++)  
    for   (int   m=0;m<M;m++)  
  {  
   
  }Top

2 楼Kevin_qing()回复于 2000-06-15 13:47:00 得分 15

char   str[N*M][MAX_LENG];  
  int   i=0;  
  for(int   n=0;n<N;n++)  
    for   (int   m=0;m<M;m++)  
  {  
        sprintf(str[i++],"str%02d%02d",n,m);  
  }  
   
  结果是  
  str0000  
  str0001  
  str0002  
  str0100  
  str0101  
  str0102  
  str0200  
  str0201  
  str0202  
  str0300  
  str0301  
  str0302  
  Top

3 楼zjy()回复于 2000-06-15 16:23:00 得分 0

Kevin_qing先生,我要的不一定是两个数组的组合,  
  这是个标准的数学上的组合问题,Thank   you  
   
  Top

4 楼WHQ()回复于 2000-06-15 17:58:00 得分 35

下面这个总可以吧:  
  #include   <stdio.h>  
  //   N个数的全排列:  
   
  typedef   void   (*MyOutputFunc)(int   numb,   char   out[]);  
   
  void   Iterate(int   n,   char   in[],   char   out[],   int   nmax,   int&   numb,   MyOutputFunc   f)  
  {  
  if(   n   ==   0   )  
  {  
  f(numb++,   out);  
  return;  
  }  
  for(int   i   =   0;   i   <   nmax;   i++)  
  {  
  if(   in[i]   !=   -1   )  
  {  
  out[nmax-n]   =   in[i];  
  in[i]   =   -1;  
  Iterate(n-1,   in,   out,   nmax,   numb,   f);  
  in[i]   =   out[nmax-n];  
  }  
  }  
  }  
   
  void   PrintP(int   numb,   char   out[])  
  {  
  printf("[%08d]:   %s\n",   numb,   out);  
  }  
   
  #define   MAX     62  
  main()  
  {  
  char         in[MAX+1],   out[MAX+1];  
  int           numb   =   0;  
  for(   int   i   =   0;   i   <   MAX;   i++   )  
  {  
  if(   i   <   26   )   in[i]   =   'a'+i;  
  else   if(   i   <   52   )   in[i]   =   'A'+i-26;  
  else   in[i]   =   '0'+i-52;  
  out[i]   =   -1;  
  }  
  in[i]   =   out[i]   =   0;  
  Iterate(MAX,   in,   out,   MAX,   numb,   PrintP);  
  printf("\nAll   items   are   %d\n",   numb);  
  return   0;  
  }  
  Top

5 楼zjy()回复于 2000-06-21 15:34:00 得分 0

我明白了,这是我的方法:  
  nTotal   =   1;  
  for(i   =   0;i<n;i++){  
          nTotal   =   nTotal   *   m[i];  
  }  
   
  mCount[0]   =   1;  
  for(i=1;i<nUseTimes;i++){  
          mCount[i]   =   m[i-1]   *   mCount[i-1];  
  }                  
   
  int                   nMod;  
  String[]         sCombo   =   new   String[nTotal][nUseTimes];  
  for(i   =   0;i   <   nTotal;i   ++){  
          for(j=0;j<nUseTimes;j++){  
                  nMod   =   (i   /   mCount[j])   %   nCount[j];  
                  sCombo[i][j]   =   sTimeLists[j][nMod];  
          }  
  }  
   
  Top

相关问题

  • js的字符串组合?
  • 分组合计字符串,,,,,,,,,,急!!!
  • 字符串数组组合问题
  • 组合字符串的问题
  • 格式化字符串的方法。
  • 求字符串截取方法?
  • 求一字符串替换方法。
  • 按长度分割字符串为字符串数组的最快方法
  • 问一个组合字符串的问题
  • 请教字符串数组重新组合问题?

关键词

  • strn
  • newstr
  • numb
  • str
  • char

得分解答快速导航

  • 帖主:zjy
  • Kevin_qing
  • WHQ

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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