2015-11-19 34 views
0

我試圖創建一個函數,它在字符數組與字符串中刪除空格和標點符號,例如加密此郵件。我已經在這個網站上閱讀了一些關於人們做同樣事情的其他話題,但是沒有任何答案對我有用。所以我試圖實現一個函數,它接受字符數組並返回一個沒有空格或標點符號的新字符數組。下面是函數我到目前爲止:[解決]試圖使一個函數來從字符陣列

void RemovePunct(char old_String[], char new_String[]){ 
     for (int i = 0; i != 50; i++) 
     { 
     if(isspace(old_String[i])==true) continue; 
     if(ispunct(old_String[i])==true) continue; 
       if(isalnum(old_String[i])) new_String[i] = old_String[i]; 
     } 
     return; 
} 

當我運行通過這個函數返回「ENCRYPTSTHIS▒MESSAGEE」,「ENCRYPTTHIS▒MESSAGE」,「ENCRYPTTHIS▒MESSAGEE」,或一些類似的變化與示例串額外的字母或特殊字符。有時它會成功刪除一個空間,但其他空間總是一個字母或一些奇怪的字符。任何人有任何想法這個功能有什麼問題或如何使它成功地工作?感謝先進的任何幫助。

編輯:大家的幫助我增加了第二個索引和initilized的arryay,以字符串填充它之前,所有的時間和預定功能的工作謝謝。

+1

你有兩個字符串和一個索引字符未初始化值。這可能可以在色情內運行,但不在您的代碼中。 –

+0

是否有阻止std :: regex使用的限制?例如:http://en.cppreference.com/w/cpp/regex/regex_replace,適合您的需求 – Nandu

+1

正則表達式感覺超必殺。簡單的'std :: remove_if'足夠簡單的過濾任務。 [http://en.cppreference.com/w/cpp/algorithm/remove](http://en.cppreference.com/w/cpp/algorithm/remove) –

回答

0

您需要使用不同的迭代器新的字符串。 通過使用「我」在這兩個新老,你的新的字符串爲相應的空格/標點符號在舊字符串

void RemovePunct(char old_String[], char new_String[]){ 
     int j = 0; 
     for (int i = 0; i != 50; i++) 
     { 
     if(isspace(old_String[i])==true) continue; 
     if(ispunct(old_String[i])==true) continue; 
       if(isalnum(old_String[i])) new_String[j++] = old_String[i]; 
     } 
     return; 
} 
+0

非常感謝你的工作,但現在我在字符串的末尾添加了一些額外的字符。你如何建議檢查它是字符串的結尾? – Kaned1

+0

終止與'new_String [J] = 0'新的字符串,不要忘記添加邊界檢查 - 通過緩衝區長度爲'RemovePunct',並確保您只訪問或更改你應該內存。您還應該檢查源字符串中的終止符。 –

+0

那是因爲你沒有做new_string [j ++] ='\ 0';在返回之前。 – Nandu