gpt4 book ai didi

c - 如何将单个字符从一个 char** 复制到另一个 char**?

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:04 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,将以特定格式输入的单词分解为句段/音节。我想以以下格式输入单词:

[d-i-s][c-o-#][v-er-#]

并以以下格式存储:

syllable[0]=dis
syllable[1]=co
syllable[2]=ver

到目前为止,我已经设法使用定界符“]”将其分解为音节,并将其保存为以下格式的字符**:

syllable[0]=[d-i-s
syllable[1]=[c-o-#
syllable[2]=[v-er-#

所以现在我只想清理它并删除不需要的字符!我想我会制作一个新数组并复制旧数组中的字母,只要它们不是 [ - #.但是对于我来说,我无法弄清楚如何将正确的字母复制到另一个数组中!!

我知道我不能这样做:

cleanArray[i][j] = dirtyArray[i][k] 

因为 cleanArray[i] 是一个 char* 而我不能编辑它对吗?但是我可以做什么?

我读过很多类似的问题,这些问题建议使用 strncpy 和 snprintf(how to copy char array to another char array in C?strcpy and printf a multidimensional char array C),但我已经尝试过这些,但无法使它们工作。我什至尝试将 cleanArray 放入 3 个维度,希望我能够将单个字母作为 char*s 保存到 cleanArray[i][j] 中,这可能是完全错误的。

解决这个问题的正确方法是什么?很抱歉,如果它很明显,但我已经花了几个小时在上面,现在非常、非常、困惑。我非常感谢你能提供的任何建议!

这是我的代码:

char** cleanStrings (char**dirtyList, int arrayLength)
{
int i, j, k;
char** cleanList = (char**)calloc(arrayLength, CHARLEN);

for (i=0; i<arrayLength; i++)
{
k= 0;
cleanList[i] = (char*)calloc(10,CHARLEN);

for (j=0; j<strlen(dirtyList[i]+1);j++)
{

if (dirtyList[i][j] == '[') continue;
else if (dirtyList[i][j] == '#') continue;
else if (dirtyList[i][j] == '-') continue;
else
//i know this is wrong, but what is the right way of doing it?
cleanList[i][k] = dirtyList[i][j];

k++;
}
}
return cleanList;
}

编辑

感谢您的所有评论,我现在已经开始工作了!与我的想法相反,正如 Barmar 指出的那样:

cleanArray[i][j] = dirtyArray[i][k]

我的代码没有工作,因为我犯了很多其他错误,例如:- 转换 calloc 的返回值- 没有为 calloc 正确分配内存-不正确的括号

我还在头文件中找到了代码,我认为它本身就存在问题。

最佳答案

假设您使用的 calloc size 参数错误。其中之一char** cleanList = (char**)calloc(arrayLength, CHARLEN);cleanList[i] = (char*)calloc(10,CHARLEN);是错的。您也不应该转换 malloc() / calloc() 的返回值。 .出于易读性和代码流的目的,我还替换了 if报表。你还写了for (j=0; j<strlen(dirtyList[i]+1);j++)而不是 for (j=0; j<strlen(dirtyList[i])+1;j++)因为strlen()计算不带 \0 的字符串长度.这是几乎没有改动的代码。

char** cleanStrings (char**dirtyList, int arrayLength)
{
int i, j, k;
char **cleanList = calloc(arrayLength,sizeof * cleanList);

for (i=0; i<arrayLength; i++)
{
k= 0;
cleanList[i] = calloc(10,sizeof * cleanList[i]);

for (j=0; j<strlen(dirtyList[i])+1;j++)
{

if ((dirtyList[i][j] != '[') && (dirtyList[i][j] != '#') && (dirtyList[i][j] != '-') ){
cleanList[i][k] = dirtyList[i][j];
k++;
}

}
}
return cleanList;
}

关于c - 如何将单个字符从一个 char** 复制到另一个 char**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306558/

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