如何创建一个字符串数组℃的字符串 [英] how to create a string from an array of strings C

查看:293
本文介绍了如何创建一个字符串数组℃的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习有关阵列,并想知道如果有人能帮助我。我有一个字符串数组,需要创建一个新的字符串这是所有数组元素的串联。我遇到的问题是,我只能打印第一串在我的阵列中,不是所有的人。我知道有一个空在每个字符串的结尾在我的数组所以我将如何解决这个问题?也许二维数组?顺便说一句,我不允许使​​用任何字符串处理函数从string.h中。谢谢你。

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
INT findLength(char数组[])
{
    INT I = 0;
    对于(i = 0;数组[我] ='\\ 0';!我++)
    {
    }
    返回我;
}无效arrayToString(字符字符串[])
{
    INT N = 0;
    INT I = 0;
    INT L = findLength(字符串);
    字符* finalString;
    finalString =的malloc(L *的sizeof(字符));
    对于(i = 0;字符串[我] ='\\ 0';!我++){
        finalString [N] =字符串[我]
        Ñ​​++;
    }
    对于(i = 0; finalString [I] ='\\ 0';!我++){
        的printf(%C,finalString [I]);
    }
}INT主(INT ARGC,为const char * argv的[])
{
    字符*颜色[] = {红,蓝,红};
    arrayToString(*颜色);
    返回0;
}


解决方案

更改功能 arrayToString 有类型的两个arguments.one 的char * * 和类型的第二个为size_t 定义strings.Also的数量让其返回值是的char * 来返回一个指向分配memory.finally不要忘记释放此内存。

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
INT findLength(char数组[]){
    INT I = 0;
    对于(i = 0;数组[我] ='\\ 0';!我++){
    }
    返回我;
}字符* arrayToString(字符**字符串,为size_t大小){
    INT bigSize = 0,len个;
    INT I = 0,J,K;
    为(J = 0; J<大小; J ++){
        bigSize + = findLength(字符串[J]);
    }
    字符* bigstring =(字符*)malloc的(bigSize + 1);
    为(J = 0; J<大小; J ++){
        LEN = findLength(字符串[J]);
        对于(K = 0; K< LEN; k ++){
            bigstring [I +] =字符串[J] [K];
        }
    }
    bigstring [I] ='\\ 0';
    返回bigstring;
}INT主(INT ARGC,为const char * argv的[])
{
    字符*颜色[] = {红,蓝,红};
    字符* bigstring = arrayToString(色,3);
    的printf(%S \\ n,bigstring);
    免费(bigstring);
    返回0;
}

I am learning about arrays and was wondering if someone can help me out. I have an array of strings and need to create a new string which is a concatenation of all the array elements. The problem I'm having is I'm only able to print the first string in my array, not all of them. I understand there is a null at the end of each string in my array so how would I work around that issue? Maybe 2d array? By the way I'm not allowed to use any string manipulation functions from string.h. Thank you.

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


int findLength(char array[])
{
    int i = 0;
    for (i = 0; array[i] != '\0'; i++)
    {
    }
    return i;
}

void arrayToString(char string[])
{
    int n = 0;
    int i = 0;
    int l = findLength(string);
    char *finalString;
    finalString = malloc(l * sizeof(char));
    for (i = 0; string[i] != '\0'; i++) {
        finalString[n] = string[i];
        n++;
    }
    for (i = 0; finalString[i] != '\0'; i++) {
        printf("%c", finalString[i]);
    }
}

int main(int argc, const char * argv[])
{
    char *color[] = { "red", "blue", "red" };
    arrayToString(*color);
    return 0;
}

解决方案

Change your function arrayToString to have two arguments.one of type char ** and the second of type size_t defining the number of strings.Also let its return value to be char * to return a pointer to the allocated memory.finally don't forget to free this memory.

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


int findLength(char array[]) {
    int i = 0;
    for (i = 0; array[i] != '\0'; i++) {
    }
    return i;
}

char* arrayToString(char **string, size_t size) {
    int bigSize = 0, len;
    int i = 0, j, k;
    for (j = 0; j < size; j++) {
        bigSize += findLength(string[j]);
    }
    char *bigstring = (char *)malloc(bigSize + 1);
    for (j = 0; j < size; j++) {
        len = findLength(string[j]);
        for (k = 0; k < len; k++) {
            bigstring[i++] = string[j][k];
        }
    }
    bigstring[i] = '\0';
    return bigstring;
}

int main(int argc, const char * argv[])
{
    char *color[] = { "red", "blue", "red" };
    char *bigstring = arrayToString(color, 3);
    printf("%s\n", bigstring);
    free(bigstring);
    return 0;
}

这篇关于如何创建一个字符串数组℃的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆