给出一组数字[2,1,1]
给定一组字符[x,y,z];
尝试创建一个看起来像[x,x,y,z]
的char数组//将char数放入第一个数组中。所以@index 0 char是x,值是2所以把x x
我可以使用2个循环来完成这个但是只能使用1个循环吗?使事情变得不那么复杂?
答案 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 . . .