[英]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 數組中不同位置的指針。 一個指向第一個可用空間,另一個指向您檢查的當前角色。
你只需要弄清楚這些問題:
你在這里有幾個單獨的問題。
一是您錯誤地輸入了比較: 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;
}
如果您只想刪除前導空格,那就更簡單了,只需更改clean
功能:
void clean( char* tab )
{
int i = 0;
while ( tab[i] == ' ' )
{
copy( tab + i, tab + i + 1 );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.