我需要一个有效的解决方案(空间+时间)来解决以下问题,
当前代码
#define MAX_CHAR 26
char alphabet[MAX_CHAR] =
{
'A',
'B',
'C',
'D',
'E',
...
...
'Z'
}
print_first_alphabet_number (Str)
{
for (i=0; i < MAX_CHAR; i++)
{
if (Str[0] == start_letter[i])
{
printf ("%d", i);
return;
}
}
return;
}
示例IO
Apple -> 0
Door -> 3
Zoo -> 25
修改后的代码
#define MAX_CHAR 27
char alphabet[MAX_CHAR] =
{
'A',
'B',
'@',
'C',
'D',
'E',
...
...
'Z'
}
期望
应修改 print_first_alphabet_number
以获得与样本IO相同的结果。
提前致谢..
修改
这不是确切的问题,这只是一个例子..
答案 0 :(得分:0)
#define MAX_CHAR 27
char alphabet[MAX_CHAR] =
{
'A',
'B',
'@',
'C',
'D',
'E',
...
...
'Z'
}
print_first_alphabet_number (Str)
{
for (i=0; i < MAX_CHAR; i++)
{
if (Str[0] == start_letter[i])
{
printf ("%d", start_letter[i] - 'A');
return;
}
}
return;
}
或者@ nico-schertler建议,如果你只需要打印与字母顺序或大写字母相同的整数,你可以在没有任何字符数组和循环的情况下实现这一点。
printf ("%d", Str[0] - 'A');
答案 1 :(得分:0)
很难理解你在做什么,你只想要alpha值的索引?
#include <stdio.h>
#include <ctype.h>
#define MAX_CHAR 27
char alphabet[] =
{
'A',
'B',
'@',
'C',
'D',
'E',
...
'Z'
};
void print_first_alphabet_number(char * Str)
{
unsigned int ret = 0;
for (unsigned int i=0; i < MAX_CHAR; i++)
{
if (Str[0] == alphabet[i])
{
printf("%d\n", ret);
return;
}
if(isalpha(alphabet[i])) ret++;
}
return;
}
int main()
{
print_first_alphabet_number("Door");
return 0;
}
答案 2 :(得分:0)
假设:您无法通过索引区分插入的元素,因此这是输入。在更多插入时,应组织插入的偏移数组。
#include <stdio.h>
int main()
{
int idx;
char abc[] = "AB@CDEFGHIJKLMNOPQRSTUVWXYZ";
int skip = 2; /* index to be skipped */
int num_skip = 0;
int size = sizeof(abc)/sizeof(abc[0]);
char ch;
printf( "char [A-Z]: " );
(void)scanf( "%c", &ch );
for( idx = 0; idx < size; ++idx )
{
if( skip == idx ) { ++num_skip; }
if( ch == abc[idx] )
{
printf( "%d\n", idx - num_skip );
idx = size;
}
}
return 0;
}