Busque en la web “todas las combinaciones posibles de una cadena”. Muchas personas han escrito el programa. Aquí está el de C, plagiado de uno de ellos.
Para verificar si dos cadenas son anagramas, encuentre todas las combinaciones de la cadena 1 y verifique si alguna de las combinaciones es igual a la cadena 2 (función de comparación de cadenas). Si alguna de las combinaciones es igual a la cadena 2, la cadena 2 es un anagrama de la cadena 1. Recuerde recortar todos los espacios internos (si la cadena es una oración y no solo una palabra) antes de hacer esto.
Lo siguiente es solo para imprimir todas las combinaciones, que es la parte principal de su problema. La comparación con su cadena 2 se puede construir fácilmente.
// Program to print all combination of size r in an array of size n
- ¿Cómo las personas solteras ven la vida?
- ¿Siempre tenemos una razón para todo?
- ¿Cuál es la importancia de la muerte y la vida futura para los egipcios?
- Si un genio te diera un poder especial, ¿qué pedirías y cómo cambiaría tu vida normal?
- ¿Por qué la religión es una parte tan importante de la cultura?
#include
void
combinationUtil(int
arr[], int
data[], int
start, int
end,
index, int
int
index, int
r);
// The main function that prints all combinations of size r
// in arr[] of size n. This function mainly uses combinationUtil()
void
printCombination(int
arr[], int
n, int
r)
{
// A temporary array to store all combination one by one
data[r];
int
data[r];
// Print all combination using temprary array 'data[]'
combinationUtil(arr, data, 0, n-1, 0, r);
}
/* arr[] ---> Input Array
data[] ---> Temporary array to store current combination
start & end ---> Staring and Ending indexes in arr[]
index ---> Current index in data[]
r ---> Size of a combination to be printed */
void
combinationUtil(int
arr[], int
data[], int
start, int
end,
index, int
int
index, int
r)
{
// Current combination is ready to be printed, print it
if
(index == r)
{
for
(int
j=0; j<r; j++)
printf("%d ", data[j]);
printf("\n");
return;
}
// replace index with all possible elements. The condition
// "end-i+1 >= r-index" makes sure that including one element
// at index will make a combination with remaining elements
// at remaining positions
for
(int
i=start; i= r-index; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i+1, end, index+1, r);
}
}
// Driver program to test above functions
int
main()
{
int
arr[] = {1, 2, 3, 4, 5};
int
r = 3;
int
n = sizeof(arr)/sizeof(arr[0]);
printCombination(arr, n, r);
}