給定一組字符和一個正整數p,我必須打印所有可能的字符串長度p,可以由給定的集合形成。打印所有可能的字符串長度p,可以從給定的集合形成
for eg: if the set is {a,b}
and the value of p is 2
Output is: aa,ab,ba,bb
我知道,對於一個給定大小爲n,將有長度爲p的n個p可能的字符串。
什麼是可用於打印所有可能的字符串的最佳方法?我只想要一個解決方法。
我正在使用C.
給定一組字符和一個正整數p,我必須打印所有可能的字符串長度p,可以由給定的集合形成。打印所有可能的字符串長度p,可以從給定的集合形成
for eg: if the set is {a,b}
and the value of p is 2
Output is: aa,ab,ba,bb
我知道,對於一個給定大小爲n,將有長度爲p的n個p可能的字符串。
什麼是可用於打印所有可能的字符串的最佳方法?我只想要一個解決方法。
我正在使用C.
一個可能的辦法是從一個空字符串開始,由一個給它使用遞歸函數並打印其添加的人物之一。
這裏是我的代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void print_string(char str[],char new_str[],int current_len,int n,int len)
{
/*
str=orignal set,
new_str=empty char array,
current_len=0(Intially)
n=no of elements to be used
len=the value of p given*/
if(current_len==len)//print string when length is equal to p
{
printf("%s\n",new_str);
return;
}
else
{
int i;
for(i=0;i<n;i++)
{
new_str[current_len]=str[i];
print_string(str,new_str,current_len+1,n,len);
}
}
}
int main()
{
char set[]={'a','b'};
char arr[10]="";
print_string(set,arr,0,2,2);
return 0;
}
輸出:
aa
ab
ba
bb
您想按字典順序列出字符串。最快的方法(和最少的內存使用)是實現一個函數來計算給定的下一個字符串。下面是一些temptative代碼:
char first_char='a';
int n_chars = 2;
int p=2;
char result[100];
int i,j;
/* fill-in first string */
for(i=0;i<p;++i) result[i]=first_char;
result[i]=0; /* string terminator */
printf("%s\n",result); /* print first string */
while(1) {
/* find last character of result which can be incremented
for (j=p-1;j>=0 && result[j]!=first_char + n_chars -1;j--);
if (j<0) break; /* this was the last string */
result[j]++; /* increment j-th character
for(j++;j<p;++j) result[j]=first_char; /* reset following chars */
/* print current string */
printf("%s\n",result);
}
我認爲你的意思是字典順序。 –
您可以使用一個載體,我們稱之爲:字符串[P]。 如果p是例如。 7,您將擁有: string = [0,0,0,0,0,0,0]。
對於字符串「smthing」,索引0是第一個字符,第二個索引1,依此類推,直到N. ,您將具有:0 - s,1 - m,2 - t,3 -h,4-i,5-n,6-g。你可以使用:while(字符串中的所有元素!='n'){ 作爲初始字符串(字符串[p] = {0}),你將得到:「sssssss」,我們建立的第一個字符串直到是。 您將始終在每個循環的索引處添加+1,如果index = n,則將重置它,例如,如果n = 9,例如[0 0 9] - > [0 1 0]。 ..你將通過解釋像我描述的指數所有可能的組合; }
家庭作業,人。請不要直接回答。 –
-1沒有嘗試自己解決問題。 –