Dr_Natas
2013-04-03 12:38:40 UTC
e.g.
three_ele_subs ("ACEG")
{A, C, E}
{A, C, G}
{A, E, G}
{C, E, G}
#include
#include
#define CMP_LEN 100
int is_empty (const char *) ; /* Checks if set is empty */
char *two_ele_subs(char *, int, int); /* Lists two-element subsets of a given set of letters */
void print_with_commas(const char *); /* Prints commas that separate each character in a set */
void print_set(const char *) ;
char *one_ele_subs(char *set, int char_count1);
char *tree_ele_subs(char *set, int char_count1, int char_count2, int char_count3);
int main(void)
{
/* Declare variables */
int c_count1 = 0 ; /* Counts the first character in the subset */
int c_count2 = 1 ; /* Counts the second character in the subset */
int c_count3 = 2 ;
char compound[CMP_LEN]; /* string representing a compound */
printf("Enter at least 4 letters with no space e.g. 'abcd'\n");
scanf ("%s", compound);
/* Provide one-element subsets of a given set of letters */
printf("\nNow demonstrating one-element subsets of a set of letters.\n");
printf("One element\n");
one_ele_subs(compound, c_count1);
printf("\nNow demonstrating two-element subsets of a set of letters.\n");
printf("Two element\n");
two_ele_subs(compound, c_count1, c_count2);
/* Provide tree-element subsets of a given set of letters */
printf("\nNow demonstrating tree-element subsets of a set of letters.\n");
printf("Tree element\n");
tree_ele_subs(compound, c_count1, c_count2, c_count3);
return 0;
}
int is_empty(const char *set)
{
/* Return null character if set is empty */
return (set[0] == '\0');
}
char *one_ele_subs(char *set, int char_count1)
{
char sub[65]; /* The subset of a given set of letters */
int i = 0;
/* Check if set is empty */
if (is_empty(set))
{
printf("\nThere is no set for testing.");
}
else
{
/* Copy characters into subset provided that limits have not been reached */
if (char_count1 < strlen(set) - 1)
{
for (i = 0; i < strlen(set); i++)
{
strncpy(&sub[0], &set[char_count1], 1);
sub[strlen(set) - 2] = '\0';
print_set(sub);
printf("\n");
char_count1++;
}
printf("\n");
}
}
}
char *two_ele_subs(char *set, int char_count1, int char_count2)
{
char sub[65]; /* The subset of a given set of letters */
/* Check if set is empty */
if (is_empty(set))
printf("\nThere is no set for testing.");
else
{
/* Copy characters into subset provided that limits have not been reached */
if (char_count1 < strlen(set) - 1)
{
if (char_count2 < strlen(set))
{
strncpy(&sub[0], &set[char_count1], 1);
strncpy(&sub[1], &set[char_count2], 1);
sub[strlen(set) - 2] = '\0';
print_set(sub);
printf("\n");
/* Adjust counter and call function again */
two_ele_subs(set, char_count1, char_count2 + 1);
}
else
{
/* Reset counter for char_count2 to help prepare for next copy batch */
char_count2 = char_count1 + 2;
/* Adjust counter and call function again */
two_ele_subs(set, char_count1 + 1, char_count2);
}
}
}
}
char *tree_ele_subs(char *set, int char_count1, int char_count2, int char_count3)
{
char sub[65]; /* The subset of a given set of letters */
/* Check if set is empty */
if (is_empty(set))
{
printf("\nThere is no set for testing.");
}
else
{
/* Copy characters into subset provided that limits have not been reached */
if (char_count1 < strlen(set) - 1)
{
if (char_count1 < strlen(set))
{
strncpy(&sub[0], &set[char_count1],