gpt4 book ai didi

c - 我正在尝试创建 NxM 字符数组,其中 'N' 是动态的, 'M' 是静态的

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

我有这个字谜问题,但我的问题有点不同。问题是我要求用户以字符串形式输入输入,它是一个 2D 字符数组,并将它们逐字分解,例如:

输入:

XDG LMN OPI
STOP //STOP to stop taking the input

我希望我的输出采用这种形式:

输出:

xdg
lmn
opi //converting into lowercase

现在,我可以通过查找空间来做到这一点,当有空间时放置 '\0' 并增加 N 并使 M 等于静态字符数组中的 0。

另一个解决方案是我将创建动态字符数组并完成所有数学运算。

但是,在我的问题中,我不确定行数,但我很确定列的长度,最大 20。所以,我想知道是否只能创建动态行,直到我在我的二维数组中找不到 NULL。

这是我的功能:

void TransformString( char input[][LINELEN], size_t counter ) {
size_t Row = 0;
size_t Col = 0;
char *str[20];
str = malloc(Row * sizeof(char));
for(int i = 0 ; i < counter ; i++ ){
char *string = input[i];

while( *string != '\0' ){
if( !(isspace(*string)) ){
*string = tolower(*string);
str[Row][Col++] = *string;printf("RR : %d C : %d\n",Row,Col);

} if(*string == ' ') { printf("C : %d\n",Col);
str[Row][Col] = '\0' ;
Row++;
str = malloc(Row * sizeof(char)) ; printf("Row: %d\n",Row);
Col = 0;
}
string++;
}
str[Row][Col] = '\0' ;
Row++;
*str = malloc (Row * sizeof(char) );
Col = 0;
}
} // end of function

对于动态,我们采用char ** str;,因此我采用char *str[20];
该代码无法根据我的需要工作。请看看这个并告诉我我错在哪里的逻辑。

最佳答案

您需要 realloc 和 char (*str)[20] 而不是 char *str[20]
示例代码:

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

#define LINELEN 96
#define COLMAXLEN 20

void TransformString(char input[][LINELEN], size_t counter ) {
size_t Row = 0;
char (*str)[COLMAXLEN] = NULL;

for(size_t i = 0 ; i < counter ; i++ ){
char *string = input[i];

while( *string != '\0' ){
while(isspace(*string))
++string;//skip spaces
if(!*string) break;

void *temp;//char (*temp)[COLMAXLEN];
if((temp = realloc(str, (Row+1) * sizeof(*str))) == NULL){//expand
fprintf(stderr, "malloc error at %s\n", __func__);
free(str);
return ;
}
str = temp;//update if realloc is success

size_t Col = 0;
while(*string && !isspace(*string) && Col < COLMAXLEN -1){
str[Row][Col++] = tolower(*string++);
}
str[Row++][Col] = '\0';
}
}
for(size_t r = 0; r < Row; ++r)
puts(str[r]);
free(str);
}

int main(void){
char input[100][LINELEN] = {
"XDG LMN OPI",
"STOP"
};
size_t count_line = 1;

TransformString(input, count_line );

return 0;
}

关于c - 我正在尝试创建 NxM 字符数组,其中 'N' 是动态的, 'M' 是静态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347742/

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