gpt4 book ai didi

c - 将数组重新排列成表以打印到文本文件中

转载 作者:行者123 更新时间:2023-11-30 16:38:19 25 4
gpt4 key购买 nike

我有两个数组,一个保存实数,另一个保存虚数。我试图将它们打印在一列中,其中第一个实值和虚值位于同一行,第二个值位于第二行,依此类推。输入如下所示:

char real_val[15]={'2',' ','6',' ','2',' ','7',' ','8',' ',' ',' '};
char imag_val[15]={'1','2','5',' ','9',' ','3',' ','7',' ','6',' '};

输出需要如下所示:

   2     125
6 9
2 3
7 7
8 6

我尝试将数组分解为标记并打印,但当代码到达以下代码的第 18 行时,我收到一条错误消息:“无效的读取大小 1”:

1   #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main () {
6 int p,q,r, real_count, imag_count;
7 char real_val[15]={'2',' ','6',' ','2',' ','7',' ','8',' ',' ',' '};
8 char imag_val[15]={'1','2','5',' ','9',' ','3',' ','7',' ','6',' '};
9 real_count = 0;
10 imag_count = 0;
11 const char delimiter[1] = {' '};
12 char output_array[8][2] = {'0'};
13 char *real_token;
14 char *imag_token;
15 int n = 0;
16
17
18 real_token = strtok(real_val,' ');
19 imag_token = strtok(imag_val,' ');
20
21 while(real_token !=NULL){
22 n++;
23 real_token = strtok(NULL, delimiter);
24 imag_token = strtok(NULL, delimiter);
25 }
26 }

我还尝试通过创建 3 维数组来手动执行此操作

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

int main () {
int m,n,p,r,t, real_count, imag_count;
char real_val[15]={'2',' ','6',' ','2',' ','7',' ','8',' ',' ',' '};
char imag_val[15]={'1','2','5',' ','9',' ','3',' ','7',' ','6',' '};
char array1[8]= {'0'};
char array2[8]={'0'};
int q = 0;
int s = 0;
char output_array[1][2][8]= {'0'};


for(m=0;m<sizeof(real_val);m++){

for(p=0;p<sizeof(real_val);p++){
if (real_val[p] != ' ' && real_val[p] != '\0'){
array1[q] = real_val[p];
q++;

}
else{
for(n=q;n<8;n++){
array1[n]= 0;
}
for(t=0;t<8;t++){
output_array[m][0][t] = array1[t];
}
q=0;
}
}
for(r=0;r<sizeof(imag_val);r++){
if (imag_val[r] != ' ' && imag_val[r] != '\0'){
array2[s] = imag_val[r];
s++;
}
else{
for(n=s;n<8;n++){
array2[n]= 0;
}
for(t=0;t<8;t++){
output_array[m][1][t] = array2[t];
}
r=0;

//strcat(array1,array2);
fprintf("%s", output_array);

}
}


}
}

但经过多次改变和我的大脑受伤后,我放弃了这个。任何有关我如何解决这个看似简单的问题的指导将不胜感激。如果实部和虚部之间的位数相同但有所不同,那就容易多了。

提前谢谢您。如果我忘记了详细信息,请随时询问。

最佳答案

strtok 接受包含分隔符列表的字符串,而不是单个字符。要消除编译错误,您需要替换:

real_token = strtok(real_val,' ');

real_token = strtok(real_val,"");

其他情况也是如此。

此外,您不能混合两个标记化,您需要拆分第一个字符串,然后再拆分第二个字符串。您可以将两种标记化的结果存储在两个 char* 数组中,然后在打印期间迭代它们。所以像这样:

char *real_token[50], *imag_token[50];
real_token[0] = strtok(real_val," ");
n = 1;
while (real_token[n-1] != NULL) {
real_token[n] = strtok(NULL, " ");
n++;
}
imag_token[0] = strtok(imag_val," ");
n = 1;
while(imag_token[n-1] != NULL){
imag_token[n] = strtok(NULL, " ");
n++;
}

// here loop from 0 to n and print

关于c - 将数组重新排列成表以打印到文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47520513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com