我遇到了一个整数数组的问题;很难解释

时间:2015-02-24 21:34:06

标签: c

我在程序的这一部分遇到问题,我需要将特定字母转换为特定数字(基本上如果是输入,那么我希望它返回1)。 intArray正在捕获数字,但在此之后它不会结束。它继续打印出更多。字符数组必须没有特定的长度,所以我只是放了一个大的数量。 str1将是输入的字母。

    char str1[200];
    char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";
    int num[27] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
    int intArr1[200];

    w = 0;
    for(i=0;i<27;i++)
    {
        if(str1[w] == alphabet[i])
        {
            intArr1[w] = num[i];
            w++;
            i = 0;
        }
        else if(str1[w] == '\0')
        {
            break;
        }
    }

    int len = sizeof(intArr1);
    for(i=0;i<len;i++)
    {
        printf("%d", intArr1[i]);
    }

4 个答案:

答案 0 :(得分:1)

夫妻问题:

int len = sizeof(intArr1);  // this line returns the number of 
                            // bytes the array occupies (800 in your case)
for(i=0;i<len;i++)
{
    printf("%d", intArr1[i]);
}

sizeof操作不适合您的使用。

其次,当你填充intArr时,你会保留一个计数器来保持w的有用长度,称为len。您应该使用此而不是计算的for(i=0;i<w;i++) { printf("%d", intArr1[i]); } 变量。

w

这应该打印数组的有用内容,在你认为它应该结束时结束。

正如评论中指出的那样,根据您的总体目标,您不会仅仅依靠使用intArr来维持计数,而是保留一个跟踪大小的整体全局计数器。 {{1}},因此您可以为输入数据的多次传递保留有效的索引指针。

祝你好运......

答案 1 :(得分:1)

不是使用两个数组来比较和打印每个字符的等效数字,而只需要通过移动ASCII码来转换它们(从要转换的字符中减去字符&#39; a&#39; ASCII代码)添加1)

理论值:

'a' == 97
'a' - 'a' + 1 == 1
'b' - 'a' + 1 == 2
...
'z' - 'a' + 1 == 26

代码:

void print_array(char *input)
{
    int i = 0;

    while (input[i] != '\0')
    {
        printf("%d", input[i] - 'a' + 1);

        i++;
    }
}

int main()
{
    char input[256];

    printf("input : ");
    scanf("%s", input);

    print_array(input);

    return 0;
}

答案 2 :(得分:1)

the following code is one possibility

// ??? what to do when input char not a...z ???

#define MAX_SIZE (200)

int i=0; // input index
int j=0; // output index

char str1[MAX_SIZE]; // the input characters, null terminated

int intArr1[MAX_SIZE] = {']0'}; // clear the destination array

for(; i < strlen(str1); i++ )
{
    if( 'a' <= str1[i] && 'z' >= str1[i] )
    { // then, convert char to number
        intArr1[j] = str1[i] - 'a' + 1; // +1 so 'a' results in 1

        // update destination index
        j++;
    } // end if
} // end for

// when here, 'j' contains number of characters in destination

for(i = 0; i < j; i++)
{
    printf("%d", intArr1[i]);
}

答案 3 :(得分:0)

sizeof(intArr1) 

不会给你一个数组长度。它给出了数组占用的字节数。如果你想要数组的长度,你应该使用sizeof(intArr1)/sizeof(intArr1[0]) - 而不是给你数组中元素的数量。