在1个循环中存储char次数

时间:2014-10-24 16:21:40

标签: c

给出一组数字[2,1,1] 给定一组字符[x,y,z];

尝试创建一个看起来像[x,x,y,z]的char数组//将char数放入第一个数组中。所以@index 0 char是x,值是2所以把x x

我可以使用2个循环来完成这个但是只能使用1个循环吗?使事情变得不那么复杂?

3 个答案:

答案 0 :(得分:2)

简短的回答是你需要两个循环 - 一个用于char数组,一个用于数组数组中的每个条目。

假设n_array是数字数组,c_array是字符数组,array是最终数组。

int idx=0;
for (int cidx=0; cidx<C_LEN; cidx++) 
  for (int nidx=0; nidx<n_array[cidx]; nidx++) 
    array[idx++] = c_array[cidx];

正如评论中所指出的,您可能还需要分配array。准确执行此操作的唯一方法是,通过将n_array中的值相加,或者以c_array的长度开始并根据需要使用realloc来计算所需的条目数

答案 1 :(得分:2)

这是当作为单个循环实现时代码的样子。通过与@Trenin的回答比较可以看出,嵌套循环解决方案实际上是更简单的解决方案。

int main( void )
{
    int numberArray[] = { 5, 10, 2 };
    int charArray[] = { 'x', 'y', 'z' };
    int outputArray[200];

    int inputIndex = 0;
    int inputLength = sizeof(numberArray) / sizeof(numberArray[0]);
    int outputIndex = 0;
    int outputCount = 0;

    while ( inputIndex < inputLength )
    {
        if ( outputCount < numberArray[inputIndex] )
        {
            outputArray[outputIndex++] = charArray[inputIndex];
            outputCount++;
        }
        else
        {
            outputCount = 0;
            inputIndex++;
        }
    }
}

答案 2 :(得分:2)

有可能,在一个循环中执行此操作。我试图实现这一点,我希望我在合理的意义上做到了这一点。

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

int main(void)
{
    int count = 0, i = 0, j = 0;
    int numbers[] = {4, 3, 2};
    char array[] = {'x', 'y', 'z'};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    char target[BUFSIZ] = {'\0'};
    for (i = 0; i < size; )
    {
        target[j++] = array[i];
        ++count;
        if (!(numbers[i] > count))
        {
            ++i;
            count = 0;
        }
    }
    printf("target: %s\n", target);

    return EXIT_SUCCESS;
}

这是输出:

C:\Mine\C\test>build example
"Turbo C Compiler"
Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
source\example.c:
Turbo Link  Version 5.0 Copyright (c) 1992 Borland International

        Available memory 4125804
target: xxxxyyyzz
"GCC Compiler"
target: xxxxyyyzz
Press any key to continue . . .