簡體   English   中英

刪除額外的空格 C++

[英]Remove additional spaces C++

我有家庭作業,我應該刪除 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 字符)。

第三,您的循環實現的算法似乎並沒有很好地反映去除前導空格的意圖(如果有的話)。 我會掃描第一個不是空格的東西,然后復制字符串的其余部分,使其從字符串的開頭開始。

[對不起,但我不會發布實際代碼或比家庭作業更詳細的代碼。]

這些代碼完全不依賴於也不工作,也不分配任何臨時緩沖區。 請注意,必須定義自制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] != '\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;
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM