如何把下面的c++代码改成c的代码!本人是初学
#include <iostream>
#include <string>
using namespace std;
//---------------------------------------------
int letter[26];
//---------------------------------------------
void DFS(int pos, int depth, string str)
{
if (depth == 0) {
cout < < str < < endl;
return;
}
for (int i = pos; i < 26; ++i) {
if (letter[i] > 0) {
--letter[i];
DFS(i, depth-1, str+char(i+ 'a ') );
++letter[i];
}
}
}
int main()
{
memset(letter, 0, sizeof(letter) );
char *words = "acccccf ";
for (int i = 0; i < strlen(words); ++i)
++letter[ words[i]- 'a ' ];
for (int depth = 1; depth <= strlen(words); ++depth)
DFS(0, depth, " ");
return 0;
}
[解决办法]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int letter[26];
//void DFS(int pos, int depth, string str)
void DFS(int pos, int depth, char* str)
{
int i ;
char* newstr;
char temp[2]={0};
if (depth == 0) {
//cout < < str < < endl;
printf( "%s\n ",str);
return;
}
for ( i= pos; i < 26; ++i) {
if (letter[i] > 0) {
--letter[i];
newstr=(char*)malloc(strlen(str)+2);
strcpy(newstr,str);
temp[0]=i+ 'a ';
strcat(newstr,temp);
//DFS(i, depth-1, str+char(i+ 'a ') );
DFS(i, depth-1, newstr );
free(newstr);
++letter[i];
}
}
}
int main()
{
char *words;
int i ,depth;
memset(letter, 0, sizeof(letter) );
words = "acccccf ";
for ( i = 0; i < (int)strlen(words); ++i)
++letter[ words[i]- 'a ' ];
for ( depth = 1; depth <= (int)strlen(words); ++depth)
DFS(0, depth, " ");
return 0;
}