删除额外的空格C++

Remove additional spaces C++

本文关键字:空格 C++ 删除      更新时间:2023-10-16

我有一个家庭作业,我应该删除char数组中的所有前导空格。如果数组的开头有空格,也应该将其删除。另外,我必须注意一个空数组。我不能使用<cstring><string.h>。此外,我无法创建任何其他数组。我在谷歌上搜索了很多,但我不知道如何解决这个问题。这是我迄今为止所拥有的。

void clean(char* tab) 
{
    //char *p = tab;
    for (int i = 0; i <= sizeof(tab); i++) 
    {
        if ((tab[i] = ' ') && (tab[i + 1] = ' '))
        {
            tab[i] = tab[i + 1];
        }
    }
}
int main()
{
    char tab1[] = "   h qa  w e ";
    cout << tab1 << endl;
    clean(tab1);
    cout << tab1 << endl;
}

如果有人能给我一个如何解决的建议,我将不胜感激。

将每个空间视为数组中的一个"空闲空间",您应该填充这个空间。

您可以在char数组中维护指向不同位置的两个指针。一个到第一个可用空间,另一个到您检查的当前角色。

你只需要弄清楚这些问题:

  1. 你将如何填满这些空间
  2. 你怎么知道你什么时候做完

这里有一些单独的问题。

一个原因是您输入了错误的比较:毫无疑问,if ((tab[i] = ' ') && (tab[i+1] = ' '))应该是:if ((tab[i] == ' ') && (tab[i+1] == ' '))

第二,您使用的是sizeof(a pointer),这是您真正想要的strlen(a pointer)(或者至少是类似的东西,扫描一个NUL字符来表示字符串的末尾)。

第三,循环实现的算法似乎没有很好地反映出删除前导空格的意图(如果有的话)。我会扫描第一个不是空格的东西,然后复制字符串的剩余部分,使其从字符串的开头开始。

[对不起,我不会发布实际的代码或比家庭作业更详细的信息。]

这些代码完全不依赖于nor,也不分配任何临时缓冲区。请注意,必须定义自制的copy函数,以便在删除空间时复制字符串内容。

请注意,此代码易于理解,但如果需要性能,则可能/应该进行优化以最大限度地减少副本。

因为还不清楚你到底想要什么。。。

此操作将删除字符串中的所有空格。

#include <iostream>
void copy( char* to, char* from )
{
    int i = 0;
    while ( true ) // risky in case char* has no EOS character!
    {
        to[i] = from[i];
        if ( from[i] != '' )
            ++i;
        else
            break;
    }
}
void clean( char* tab ) 
{
    int i = 0;
    while ( tab[i] != '' )
    {
        if ( tab[i] == ' ')
        {
            copy( tab + i, tab + i + 1 );
            // do not increment i, to test tab[i] that was newly copied from tab[i+1]
        }
        else
        {
            ++i;
        }
    }
}
int main() {
    char tab1[] = "   h qa  w e ";
    std::cout << tab1 << std::endl;
    clean(tab1);
    std::cout << tab1 << std::endl;
}

https://ideone.com/Yv4aqL

如果您只想删除前导空格,则更容易,只需更改clean函数即可:

void clean( char* tab ) 
{
    int i = 0;
    while ( tab[i] == ' ' )
    {
        copy( tab + i, tab + i + 1 );
    }
}

https://ideone.com/RIAsGt