char convertalphas(char s) {
switch (s){
case 'A':
return '0';
break;
case 'B':
return '1';
break;
case 'C':
return '2';
break;
case 'D':
return '3';
break;
case 'E':
return '4';
break;
case 'F':
return '5';
break;
case 'G':
return '6';
break;
case 'H':
return '7';
break;
case 'I':
return '8';
break;
case 'J':
return '9';
break;
case 'K':
return '10';
break;
case 'L':
return '11';
break;
case 'M':
return '12';
break;
case 'N':
return '13';
break;
case 'O':
return '14';
break;
case 'P':
return '15';
break;
case 'Q':
return '16';
break;
case 'R':
return '17';
break;
case 'S':
return '18';
break;
case 'T':
return '19';
break;
case 'U':
return '20';
break;
case 'V':
return '21';
break;
case 'W':
return '22';
break;
case 'X':
return '23';
break;
case 'Y':
return '24';
break;
case 'Z':
return '25';
break;
}
}
int main()
{
char astring[10];
int i = 0;
int flag = 0;
int startedalpha = 0;
//check if there is a digit input or not
int nodigit = 0;
char cell[10];
int col;
scanf( "%s", &astring );
for ( i = 0; i < 10; ++i )
{
if(astring[i] != '\0') {
//check whether letter is capital or small
if (astring[i] >= 65 && astring[i] <= 90)
{
startedalpha = 1;
//printf( "%c\n", astring[i] );
cell[i] = convertalphas(astring[i]);
printf("cell is %s\n", cell);
}
我尝试做的是连接所有转换以供日后使用。当我把&#34; AB&#34;它返回&#34; 01 @&#34;当我把&#34; Z&#34;它返回的不是&#34; 25&#34;。我不知道出了什么问题,但这让我发疯了!我希望能够输入&#34; ABZ&#34;它将我的所有值保存到变量单元格中。例如,&#34; ABZ&#34; &#34; 0125&#34;
谢谢!
我对这个论坛感到困惑。显然,我发布了这个问题,因为有些东西我不知道,而且我不是很多大师!那么,为什么我会得到-2?我已经发布了我试过的内容。我认为这是为了帮助不被居高临下!
感谢那些回复的人!
编辑 -
我将switch语句转换为int但现在如何连接变量单元格中的整数?
答案 0 :(得分:1)
根据C标准(6.4.4.4字符常数)
- ...包含多个的整数字符常量的值 字符(例如,&#39; ab&#39;),或包含字符或转义序列 不映射到单字节执行字符的是 实施-defined.All
醇>
从&#39; 10&#39;开始的所有函数返回值到了&#39; 25&#39;包含了imolementation定义,你可以得到你不希望得到的结果。
您需要编写一个声明为
的函数char * convertalphas( const char *s );
或者
char * convertalphas( char *dest, const char *source );
顺便说一下,进行逆向转换很困难。例如&#34; 25&#34;意思?无论是&#34; CF&#34;或&#34; Z&#34;?:)
答案 1 :(得分:1)
我注意到的一件事是你有一个char返回功能,并返回除了char之外的其他东西,比如&#39; 10&#39;。它将返回一个意外的值。例如,您可以将此函数的返回值设置为整数。 所以它看起来像这样:
int convertalphas(char s) {
switch (s){
case 'A':
return 0;
case 'B':
return 1;
case 'C':
return 2;
case 'D':
return 3;
case 'E':
return 4;
return -1;
}
然后,在main函数中更改循环内部:
sprintf(auxvar, "%d", convertalphas(astring[i]);
for( jj = 0; jj < strlen(auxvar); jj++)
cell[i++] = auxvar[jj];
我希望它能以某种方式帮助你! 祝你好运。
答案 2 :(得分:0)
除了字符'K'到'Z'返回的值(如其他人所述),使用cell
从函数返回的每个字符都写入cell[]
,然后将cell
打印为字符串。但是没有字符串终止符。您需要先用{0}填充cell[]
,或者在下一个字符
cell[i] = convertalphas(astring[i]);
cell[i+1] = 0;
但问题是当char不是大写字母时会跳过cell[i]
。您需要在cell[]
cell[j++] = convertalphas(astring[i]);
cell[j] = 0;
另一个问题是cell[]
对于最终的字符串终止符而言还不够长。您需要将其声明为
char cell[11];
答案 3 :(得分:0)
总结一下,您的问题是:
char
函数无法返回单个字符以外的任何内容。
如果您尝试返回类似&#39; 12&#39;的内容,则只是根本不工作。您需要重新考虑您的算法。使用int
实现这一点应该非常简单。
这是一项需要使用switch
声明的家庭作业吗?如果没有,并且如果您按照建议返回int
而不是char
,那么简单的s-65
就行了,您不需要78行{{1 }}
由于switch
是cell
数组,char
的每个元素也只能存储单个字符。
目前还不是很清楚你想要实现什么,所以我会尝试以两种方式理解它:
3.1。您希望将每个字符的值分别存储在单元格中
示例:对于输入&#34; ABZ&#34;,您希望cell
为{0,1,25}。
这很简单。将cell
更改为cell
数组,并使用int
中的%d
格式说明符输出它们。
3.2您将printf
视为字符串而不是字符数组,并为每个字符的值连接字符串。
示例:对于输入&#34; ABZ&#34;,您希望cell
为&#34; 0125&#34;,或者换句话说,{&#39; 0&#39;,&#39; 1&#39;,&#39; 2&#39;,&#39; 5&#39;}。这意味着您无法区分&#34; ABZ&#34;而且,正如其他人所指出的那样,&#34; AMF&#34;
如果这是你想要达到的目的,首先10个元素对于cell
是不够的 - 每个字符必须单独存储,并且你不能存储&#34; 25&#34;作为单元格元素中的两个字符。
您可以为它分配21个元素(每个字母最多2个,终止cell
个字节另外一个)。在每个字母表转换为'\0'
中的值后,实现一个计数器和一些条件,一次填充int
一个字符。例如,如果字母的值存储在cell
:
val
我将把这个实现留给循环作为练习...