如果以特定格式输入,我正在尝试编写一个程序,以将单词分解为段/音节。我想以格式输入一个单词:
[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(如何将char阵列复制到c?,strcpy和printf的另一个char阵列和多维char阵列c(,但我已经尝试过这些,我可以使他们起作用。我什至尝试将CleanArray放入3个维度,希望我能够将单个字母保存到CleanArray [i] [J]为char*s,这可能是完全错误的。
正确的方法是什么?抱歉,如果很明显,但是我已经花了几个小时了,现在非常非常困惑。.我真的很感谢您提供的任何建议!
这是我的代码:
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()
计算没有