2010-12-02 54 views
0

我知道這有點非正統,可能會花費我一些downvotes,但因爲它是在1小時內到期,我不知道從哪裏開始,我想我會問你們。C家庭作業 - 字符串循環替換

基本上我帶有包含佔位符+的形式,例如一個字符串:

1+2+5 

我必須創建一個函數來打印不把任何給定的一系列不同組合的所有可能性數字。即爲系列:

[9,8,6] // string array 

輸出將是

16265 
16285 
16295 
18265 
18285 
18295 
19265 
19285 
19295 

所以對於每個輸入我得到(中位數)^(佔位符數)的輸出線。 數字爲0-9,數字串的最大格式爲[0,1,2,3,4,5,6,7,8,9]。 原始字符串可以有很多佔位符(正如您期望的輸出可以非常長)。

我必須在C中完成,最好沒有遞歸。再次,我真的很感謝任何幫助,現在不能更感激。

如果你可以提供一個想法,一個簡化的方法來解決這個問題,甚至用不同的語言或遞歸的方式,它仍然沒問題,我可以使用一個普遍的概念,並從那裏繼續前進。

+0

用C++編寫這個程序需要三十秒的時間,但在那段時間我不能破解C語言。抱歉。 – Puppy 2010-12-02 21:08:51

+0

C++也可能不錯,我只需要以某種方式翻譯它。請幫忙! – Gal 2010-12-02 21:10:07

回答

1

它以不同的順序打印它們,但沒關係。它不是遞歸的。

#include <stdlib.h> 
#include <stdio.h> 

int // 0 if no more. 
get_string(char* s, const char* spare_chr, int spare_cnt, int comb_num){ 
    for (; *s; s++){ 
     if (*s != '+') continue; 
     *s = spare_chr[comb_num % spare_cnt]; 
     comb_num /= spare_cnt; 
    }; 
    return !comb_num; 
}; 

int main(){ 
    const char* spare_str = "986"; 
    int num = 0; 
    while (1){ 
     char str[] = "1+2+5"; 
     if (!get_string(str, spare_str, strlen(spare_str), num++)) 
      break; // done 
     printf("str num %2d: %s\n", num, str); 
    }; 
    return 0; 
}; 
0

爲了做實際的更換,就可以使用strchr找到一個字符的首次出現和char *指針返回到它。然後,您可以簡單地更改該指針的值和bam,即可完成角色替換。

由於strchr搜索第一個匹配項(在空終止符之前),因此可以爲要替換的每個值重複使用它。

該循環有點棘手,但讓我們看看你做了什麼。