在数组之间添加元素而不影响索引遍历

时间:2016-11-03 16:12:52

标签: c arrays algorithm loops optimization

我需要一个有效的解决方案(空间+时间)来解决以下问题,

当前代码

#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相同的结果。

提前致谢..

修改

这不是确切的问题,这只是一个例子..

3 个答案:

答案 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;
}