概述
来自剑指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 <= (int)strlen(pstr); cap++){
char output[MAX] = "";
combination_op(pstr, output, cap);
}
}
void combination_op(char* pstr, char* output, int m){
/*
**当剩下的字符恰好够组合时,直接全部复制到输出字串中。
*/
if((int)strlen(pstr) == m){
strcat(output, pstr);
printf("%sn",output);
*(output + (int)strlen(output) - m - 1) = '