将字符数组转换为整数数组

时间:2015-04-22 20:54:01

标签: c arrays char integer

我有这个功课,这让我头疼,因为我找不到我做错了什么。

基本上,它应该读取一定数量的字符,将'x'作为最后一个字符并将它们存储到堆内存中。

之后,程序应该使用ASCII表对其进行排序。

然后,它应该将每四个字符读作一个int。输入的字符数总是4的倍数,因此每次都可以使用。

最后,但并非最重要的是,它应该打印整数。

我的问题是:程序以错误的顺序打印整数。

这就是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int cont = 1;
    int i, j, tmp;
    char c;
    char *dados = NULL;

    do
    {
        scanf("%s", &c);
        dados = (char*)realloc(dados, sizeof(char)*cont);
        dados[cont - 1] = c;
        cont++;
    }
    while(c != 'x');

    for (i = 0; i < (cont - 1); i++)
    {
        for (j = 0; j < (cont - i - 1); j++)
        {
            if (dados[j] > dados[j + 1])
            {
                tmp = dados[j];
                dados[j] = dados[j + 1];
                dados[j + 1] = tmp;
            }
        }
    }

    int *charInt = (int*)dados;
    int aux = sizeof(int);

    for(i = 1; i <= (cont - 1); i = i + aux)
    {
        printf("%d\n", *charInt);
        ++charInt;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

我做了一些修改。以下代码应该有效。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int cont = 0;
    int i, j, tmp;
    char c;
    char *dados = NULL;
    dados = malloc(sizeof(char));
    do
    {
        scanf("%s", &c);
        dados = (char*)realloc(dados, sizeof(char)*cont);
        dados[cont] = c;
        cont++;

    }
    while(c != 'x');
    for (i = 0; i < (cont - 2); i++)
    {
        for (j = 0; j < (cont - i - 2); j++)
        {
            if (dados[j] > dados[j + 1])
            {
                tmp = dados[j];
                dados[j] = dados[j + 1];
                dados[j + 1] = tmp;
            }
        }
    }

    char *charInt = (char*)dados;
    int aux = sizeof(char);

    for(i = 0; i <= (cont - 2)*aux; i = i + aux)
    {
        printf("%d\n",*charInt);

        ++charInt;
    }

    return 0;
}