4

从 D 中的 char[] 中删除空格的推荐方法是什么。例如使用 dmd 2.057 我有,

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 月提交,但不确定它是指同一件事还是不同的问题。

一般来说,建议从字符串中删除某些字符并维护前一个字符数组中的字符顺序的方法是什么?

在这种情况下返回

assert(line == "thisisalinewithspaces")

删除空白字符后

4

3 回答 3

5

removechars 接受所有字符串类型(char[]、wchar[]、dchar[]、string、wstring 和 dstring),但第二个参数必须与第一个参数的类型相同。因此,如果您将 char[] 作为第一个 arg 传递,则第二个 arg 也必须是 char[]。但是,您正在传递一个字符串:“”

一个简单的解决方案是将字符串复制到 char[]: " ".dup

删除字符(行,“”.dup)

这也有效:

删除字符(行,['\x20'])

于 2012-02-06T21:54:33.647 回答
3

removechars一个immutable(char)[](这string是别名)。您还需要获取可变字符数组.dup的结果。removechars

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);
}
于 2012-02-06T20:56:52.093 回答
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;
}
于 2012-12-20T15:05:30.603 回答