2012-02-06 59 views
4

刪除空白字符什麼是從一個char []中D.刪除空白例如,使用DMD 2.057我有recomended方式,從一個char []陣列中d

import std.stdio; 
import std.string; 
import std.algorithm; 

char[] line; 

int main(){ 
    line = r"this is a  line with spaces "; 
    line = removechars(line," "); 
    writeln(line); 
    return 0; 
} 

在編譯,這會產生這樣的錯誤:

Error: cannot implicitly convert expression ("this is a  line with spaces ") of type string to char[] 
    Error: template std.string.removechars(S) if (isSomeString!(S)) does not match any function template declaration 
    Error: template std.string.removechars(S) if (isSomeString!(S)) cannot deduce template function from argument types !()(char[],string) 

在做一些谷歌搜索,我發現類似的錯誤已在2011年6月被報告爲bug and had been filed,但不知道它是否是指同一事物或不同問題。

一般來說,建議如何從字符串中刪除某些字符並保留前一個字符數組中的字符順序?

在這種情況下返回

assert(line == "thisisalinewithspaces") 

刪除空白字符後,

+0

是否改變'line = r「這是一個帶空格的行;''爲'line = r'這是一個帶空格的行」.dup;'help? – Mehrdad 2012-02-06 20:50:22

+0

不,它不。它只消除了類型轉換中的第一個錯誤。 – eastafri 2012-02-06 20:57:20

回答

5

removechars接受所有串類型(字符[],WCHAR [],dchar [],字符串wstring的和dstring),但第二個參數必須是相同的類型爲先。所以如果你傳遞一個char []作爲第一個參數,第二個參數也必須是char []。您,但是,傳遞一個字符串: 「」

一個簡單的解決辦法是複製串爲char []: 「」 .dup

removechars(line, " ".dup)

這也適用於:

removechars(line, ['\x20'])

+0

太棒了!我正在尋找的解釋!謝謝! – eastafri 2012-02-06 22:06:05

+0

這也回答了我在這裏發生了什麼問題:)。我快速瀏覽了'removechars'的源代碼,並不能說明爲什麼它不會像他寫的那樣工作。 – eco 2012-02-06 23:58:01

3

removechars一個immutable(char)[](這是什麼string化名爲)。您還需要.dupremovechars的結果來獲取可變焦字符數組。

import std.stdio; 
import std.string; 
import std.algorithm; 

char[] line; 

void main() 
{ 
    auto str = r"this is a  line with spaces "; 
    line = removechars(str," ").dup; 
    writeln(line); 
} 
1

我嘗試所有,但不能。現在我能。

#include <iostream> 
#include <string> 
using namespace std; 
void main(){ 
char pswd[10]="XOXO  ";//this actually after i fetch from oracle 
string pass=""; 
char passwd[10]=""; 
pass=pswd; 
int x = pass.size(), y=0; 
while(y<x) 
{ 
if(pass[y]!=' ') 
{passwd[y]=pass[y];} 
y++; 
} 
strcpy(pswd,passwd); 
cout<<pswd; 
}