1 用栈实现 // test32.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdio.h" #include "string.h" static char stack[100]; static int top=0; void select(char *,int,int);//返回大小为i的字符数组; void get_range(char * string){ if(!string) return ; int len=strlen(string); for(int i=1;i<=len;i++) select(string,i,top); } void select(char * string,int i,int top){ if(i==0){ for(int j=0;j<=top;j++) printf("%c",stack[j]); printf("/n"); return ; } if(!(*string)) return; stack[top++]=*string; select(string+1,i-1,top); --top; select(string+1,i,top); } void main(){ char * string="abcdfgh"; get_range(string); } 2 用vector实现 // test33.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <vector> using namespace std; void select(char * string,int i,vector<char> result){ if(!i){ vector<char>::iterator begin=result.begin(); for(;begin<result.end();begin++) printf("%c",*begin); printf("/n"); return; } if(!(*string)) return; result.push_back(*string); select(string+1,i-1,result);//选择了string的第一个字符 result.pop_back(); select(string+1,i,result);//未选择string的第一个字符 } void get_range(char * string){ if(!(*string)) return; int len=strlen(string); vector<char> result; for(int i=1;i<=len;i++) select(string,i,result); } int main(int argc, char* argv[]) { char * string="abc"; get_range(string); }