删除其他空格C ++

时间:2015-11-05 17:59:17

标签: c++ arrays

我有作业分配,我应该删除char数组中的所有前导空格。如果数组的开头有空格,也应删除它。另外,我必须要关心一个空数组。我无法使用<cstring><string.h>。另外,我无法创建任何其他数组。我google了很多,但我不知道如何解决这个问题。这是我到目前为止所拥有的。

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;
}

如果有人能给我一个如何弄明白的提示,我将非常感激。

3 个答案:

答案 0 :(得分:0)

将每个空格视为数组中的“自由空间”,您应填写一个空格。

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

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

  1. 你会如何填补这些空间?
  2. 你怎么知道什么时候完成?

答案 1 :(得分:0)

这里有一些不同的问题。

其中一个是您错误输入了比较:if ((tab[i] = ' ') && (tab[i+1] = ' '))无疑应该是:if ((tab[i] == ' ') && (tab[i+1] == ' '))

其次,你正在使用sizeof(a pointer),你真正想要strlen(a pointer)(或者至少有类似的东西,扫描一个表示字符串结尾的NUL字符)。

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

[抱歉,但我不会发布实际代码或更多详细信息而不是家庭作业。]

答案 2 :(得分:0)

这些代码完全不依赖于nor,并且它们不分配任何临时缓冲区。请注意,必须定义自制#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] != '\0' ) ++i; else break; } } void clean( char* tab ) { int i = 0; while ( tab[i] != '\0' ) { 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; } 函数,以便在删除空格时复制字符串内容。

请注意,此代码易于理解,但可能/应该进行优化,以便在需要性能时尽量减少副本。

由于目前还不清楚你到底想要什么......

这个删除字符串中的所有空格。

clean

generate_cart_id()

如果您只想删除前导空格,则更容易,只需更改void clean( char* tab ) { int i = 0; while ( tab[i] == ' ' ) { copy( tab + i, tab + i + 1 ); } } 功能:

{{1}}

https://ideone.com/Yv4aqL