求教一个算法实现!
问题描述起来很简单:就是咱们的手机九宫格输入按键,如果输入数字组合,求输出所有字母的组合。如2键有字幕abc,3键有字母def,输入23,输出就是{"ad","ae","af","bd","be","bf","cd","ce","cf"}。求教一个C语言实现的代码,谢谢! char _2 = {'a', 'b', 'c'};char _3 = {'d', 'e', 'f'};
int k = 0;
char r;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
snprintf(r, 3, "%c%c", _2, _3);
}
} 回复 2# lxyscls
如果并不知道会输入几个数字的组合,那这个循环该如何设计呢?而且数字7和9还分别表示4个字母。
本帖最后由 lxyscls 于 2016-08-20 10:33 编辑
回复 3# xlwang_0903 struct key {
int num;
char c;
};
struct key *_7 = malloc(sizeof(int)+4*sizeof(char));
_7->num = 4; _7->c = '?'; _7->c = '?'; _7->c = '?'; _7->c = '?';
for (int i = 0; i < _7->num; i++)
... ...
本帖最后由 dorodaloo 于 2018-01-16 18:06 编辑
保持好奇心多学习 本帖最后由 dorodaloo 于 2018-01-16 18:07 编辑
回复 1# xlwang_0903
我来写一个 #include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *key[] = {
"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz",
};
void compose(char *keys);
void cpsFunc(unsigned index, char *keys, char *composedStr);
int main(int argc, char *argv[]) {
char *test[] = {"001", "3", "02310", "23", "2b4", "357", "9925", "987654"};
unsigned size = sizeof(test) / sizeof(char *);
for (int i = 0; i < size; i++) {
printf("input = %s\n", test);
compose(test);
printf("\n\n");
}
}
void compose(char *keys) {
unsigned size = strlen(keys);
for (unsigned i = 0; i < size; i++)
if (!isdigit(keys)) {
fprintf(stderr, "'%c' NOT digit\n", keys);
return;
}
char composedStr;
memset(composedStr, 0, size + 1);
cpsFunc(0, keys, composedStr);
}
void cpsFunc(unsigned index, char *keys, char *composedStr) {
if (!*keys) {
printf("%s ", composedStr);
return;
}
if (!strlen(key[*keys - '0'])) {
cpsFunc(index, keys + 1, composedStr);
return;
}
for (char *alpha = key[*keys - '0']; *alpha; alpha++) {
composedStr = *alpha;
cpsFunc(index + 1, keys + 1, composedStr);
}
}
页:
[1]