【发布时间】:2020-05-02 17:40:14
【问题描述】:
我正在尝试从我的 char* 中删除不必要的空格以供将来使用。基本上,我希望单词之间只有一个空格,并删除单词之间的任何额外空格、制表符或换行符。我相信当前的代码几乎可以工作,但是我无法读取存储在数组中的单个字符的内存。此外,任何解决方案都不得具有最大字符大小,因此如果需要动态内存分配,也需要考虑这一点。有没有办法让这个工作?谢谢
编辑 1:尾随和前导空格也应删除。感谢来自莫斯科的@Vlad 的澄清
int main()
{
char* fileString1;
fileString1=removeAdditionalWhiteSpace(fileString1);
}
char* removeAdditionalWhiteSpace(char* wordList)
{
char characterHolder;
char* finalList[strlen(wordList)];
char* delimeter = wordList;
int i = 0;
do
{
finalList[i] += characterHolder;
char* hasSpace = NULL;
while (*delimeter == ' ' || *delimeter == '\n' || *delimeter == '\t')
{
if(*delimeter == ' ')
{
if(hasSpace==NULL)
{
hasSpace = delimeter;
characterHolder = *delimeter;
}
else
{
++delimeter;
}
}
else if(*delimeter == '\n' || *delimeter == '\t')
{
*delimeter = ' ';
if(hasSpace==NULL)
{
hasSpace = delimeter;
characterHolder = *delimeter;
}
else
{
++delimeter;
}
}
}
hasSpace=NULL;
characterHolder = *delimeter;
i++;
}
while( (*wordList++ = *delimeter++) );
return *finalList;
}
【问题讨论】:
-
“我相信”。请更准确。究竟是什么问题?它会崩溃吗?它是否适用于某些输入而不适用于其他输入?另外,这真的是你的代码吗?
fileString1未设置为任何内容。请举例说明准确输入、预期结果和实际结果。 -
finalList[i] += characterHolder;在第一个循环中,characterHolder没有设置任何内容。 -
finalList[i]也没有被初始化。 -
@DegaClaw 不清楚是否需要删除字符串的前导和尾随空格
-
为什么要使用第二个缓冲区?这样的事情可以就地完成。
标签: c compression whitespace c-strings removing-whitespace