我有char数组的初始值设定项:
static const char dtmf_positions[] = "123A-------" "456B-------" "789C-------" "*0#D-------" "----E------" "-----F-----" "------G----" "-------H---" "--------J--" "---------K-" "----------L";
有人能解释一下,如何通过索引得到一些符号吗,例如符号"4"。非常感谢。
好的,那么我还有其他问题。在上面的数组中,有没有像二维数组那样,通过行和列索引来访问数组元素的方便方法?
根据C99规范,5.1.1.2翻译阶段
- 将连接相邻的字符串文字标记
您也可以在其他C规范中找到类似的文本。
所以
在翻译阶段CCD_ 1将变为CCD_。
所以你的定义类似于:
static const char dtmf_positions[] = "123A-------456B-------789C-------*0#D-----------E-----------F-----------G-----------H-----------J-----------K-----------L";
我希望现在你能找到任何符号的索引:)
编辑:您的附加问题:
/*第012345678910列*/static const char dtmf_positions[]="123A--------"/*第0行*/"456B--------"/*第1行*/"789C--------"/*第2行*/"*0#D--------"/*第3行*/"----E-------"/*第4行*/"-----F-----"/*第5行*/"-----G----"/*第6行*/"--------H---"/*第7行*/"--------J--"/*第8行*/"--------K-"/*第9行*/"---------------L";/*第10行*/#定义NCOLS(大小为("123A--------")-1)#定义FETCH_CHAR(ROW,COL)dtmf_positions[ROW*NCOLS+COL]
之后,您可以使用FETCH_CHAR(R,C)
访问任何字符
这是一个单独的C文本。该语言允许您通过在"间隙"两侧添加引号并在其间插入空白来拆分字符串文字(演示):
char *s = "AB" "CD";
printf("%sn", s);
与相同
char *s = "ABCD";
printf("%sn", s);
在格式化代码时,这样做通常是为了方便:也允许换行,这样你就可以将文字的一部分显示在垂直列中:
static const char dtmf_positions[] = "123A-------"
"456B-------"
"789C-------"
"*0#D-------"
"----E------"
"-----F-----"
"------G----"
"-------H---"
"--------J--"
"---------K-"
"----------L";
因此,如果您想找到字符'4'
的索引,请从零开始计数,并跳过文字中的"间隙"以获得索引(您应该得到11)。
什么让您感到困惑?
char a[] = "someString";
与相同
char a[] = "some" "String";
因此,如果你知道如何访问第一个数组,那么你最好对第二个数组也这样做。
int i;
size_t len = strlen(a);
for(i=0;i<len;i++)
printf("%c ",a[i]);
对于C中的数组,索引从0开始。因此,如果您想访问数组的第一个元素,可以使用dtmf_positions[0]。如果你不知道元素的索引,你可以使用循环遍历数组并检查元素,或者你可以创建一些映射来存储所有元素的索引(以防字符重复),无论何时你想检查元素是否存在以及它们的位置,你都可以使用这个映射。
简单地说:
char c = dtmf_positions[11];
声明
static const char dtmf_positions[] = "123A-------" "456B-------" "789C-------" "*0#D-------" "----E------" "-----F-----" "------G----" "-------H---" "--------J--" "---------K-" "----------L";
与相同
static const char dtmf_positions[] = "123A-------456B-------789C-------*0#D-----------E-----------F-----------G-----------H-----------J-----------K-----------L";
它创建一个CCD_ 5阵列并用CCD_
如果您想获得一个字符,只需使用dtmf_positions[n]
,其中n
是0到121之间的数字(121是