来自剑指offer上相关题目拓展,居然磨了我两天的功夫,我可能学的是假的编程。
代码是用纯C写的,题目要求是将输入字符串的所有组合全部输出,例如输入a,b,c三个字符,则它们的组合有a, b, c, ab, ac, bc, abc.
当交换两个字符时,虽然排列顺序变动,但还是算作一个组合,即ab和ba算作同一个,如何不重复的输出这些组合呢?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 25
void combination_op(char* pstr, char* output, int m);
void combination(char* pstr);
int main(){
// char* pstr = "";
char pstr[MAX] = "";
// FILE *fp = fopen("input.txt", "r");
printf("输入待处理的字符串:\n");
while(gets(pstr) != NULL);
combination(pstr);
/* if(fp != NULL){
while(fgets(pstr, sizeof(pstr), fp) != NULL);
combination(pstr);
}
*/
return EXIT_SUCCESS;
}
void combination(char* pstr){
int cap;
if(pstr == NULL){
printf("空串!\n");
return;
}
for(cap = 1; cap <&