【问题标题】:how can i convert an int array into a string array [closed]如何将 int 数组转换为字符串数组 [关闭]
【发布时间】:2015-07-25 21:27:39
【问题描述】:

我有一个整数数组:

int a[5]={5,21,456,1,3}

我需要将这些数字存储到 char 数组中,这样 char 数组就会有这样的东西:

char *s="52145613";

中有没有为此的库函数?

【问题讨论】:

  • 如果这样存储,不带分隔符,以后就无法解释了..
  • sprintf --> char str[100];sprintf(str,"%d%d%d%d%d",a[0],a[1],a[2],a[3],a[4]);
  • 我花了一秒钟才知道@CoolGuy 的答案是正确的。如果数组大小可变,则创建一个循环并连接字符串。
  • @Zain,我对这个问题很感兴趣,但是(参考 amdixon)我更愿意将字符串保存为“[5,21,456,1,3]”。这是你的想法吗? - 或者 - 你想将整数连接成“一个数字”的原因是什么? (字符串格式。)

标签: c arrays c string char integer


【解决方案1】:

sprintf 做你需要的。

小例子

char str[128];
int i=0;
int index = 0;
for (i=0; i<5; i++)
   index += sprintf(&str[index], "%d", a[i]);

snprintf 负责 str 长度

char str[128];
int i=0;
int index = 0;
for (i=0; i<5; i++)
   index += snprintf(&str[index], 128-index, "%d", a[i]);

【讨论】:

  • @WoodrowBarlow 是的,我编辑了
  • 请注意snprintf() 在出现错误时返回负值。将此值添加到index 将是错误的。
  • 如果结果字符串中的位数> 128,则此方法不起作用
【解决方案2】:

尽管其他答案在内存和指令方面效率更高,但仍试图采用更具可读性的方法。

测试了here

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

void get_me_a_string(int * int_array, int array_size, char * output_string, int output_string_max_size)
{
    if(!int_array || !output_string)
        return;

    char * aux_string = NULL;

    //Depending on the compiler int is 2-byte or 4 byte.
    //Meaning INT_MAX will be at most 2147483647 (10 characters + 1 '\0').
    aux_string = (char *) malloc(11);
    if(!aux_string)
        return;

    int i;
    int current_array_size = 0;
    for(i = 0; i < array_size; i++)
    {
        sprintf(aux_string, "%d", int_array[i]);
        current_array_size += strlen(aux_string);
        if(current_array_size < output_string_max_size)
            strcat(output_string, aux_string);
        else
            break;
    }

    free(aux_string);
}

int main(void) {
    int a[5]={5,21,456,1,3};

    int string_max_size = 256;
    char * string_from_array = NULL;

    string_from_array  = (char *) malloc(string_max_size);

    if(NULL == string_from_array)
    {
        printf("Memory allocation failed. Exiting...");
        return 1;
    }

    memset(string_from_array, 0, string_max_size);
    get_me_a_string(a, 5, string_from_array, string_max_size);

    printf(string_from_array);

    free(string_from_array);
    return 0;
}

【讨论】:

  • 这可以通过使 string_max_size 动态化来进一步扩展,string_max_size = sizeof(a) / sizeof(a[0]*11;
【解决方案3】:

这是一个演示程序,展示了如何做到这一点。

#include <stdio.h>

int main(void) 
{
    int a[] = { 5, 21, 456, 1, 3 };
    const size_t N = sizeof( a ) / sizeof( *a );
    char s[10];
    int n;

    for ( size_t i = 0, j = 0; 
          i < N && ( n = snprintf( s + j, sizeof( s ) - j, "%d", a[i] ) ) > 0;
          i++ )
    {
        j += n;
    }        

    puts( s );

    return 0;
}

程序输出是

52145613

【讨论】:

    【解决方案4】:

    您需要做的是将a 中的整数值转换为s 中的字符值,为空终止字符留出空间。在您的情况下,共有 9 个字符。 sprintf 是合适的工具,因为 vales 超过个位数:

    #include <stdio.h>
    
    int main(void)
    {
        int a[5]={5,21,456,1,3};
        char s[9] = {0};
        int n = 0;
    
        for (int i = 0; i < 5; i++) {
            n += sprintf (&s[n], "%d", a[i]);
        }
    
        printf ("\n char* s = %s\n\n", s);
    
        return 0;
    }
    

    输出

    $ ./bin/sprintf
    
     char* s = 52145613
    

    【讨论】:

    • 知道了——还没喝咖啡——核弹回答。
    【解决方案5】:

    您可以搜索sprintf()/ snprintf(),它可以为您完成工作。

    从手册页,

    int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...);

    printf() 系列中的函数根据如下所述的格式生成输出。...[...]...

    sprintf()snprintf()vsprintf()vsnprintf()写入字符串str

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多