Удалите пробельные символы из массива char [] в D - PullRequest
4 голосов
/ 07 февраля 2012

Каков рекомендуемый способ удаления пробела из символа [] в D., например, используя 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)

При выполнении поиска в Google я обнаружил, что похожая ошибка была зарегистрирована как ошибка и была подана в июне 2011 года, но я не уверен, ссылалась ли она на то же самое илидругая проблема.

В общем, какой подход рекомендуется для удаления определенных символов из строки и определения порядка символов из предыдущего массива символов?

В этом случае вернуть

assert(line == "thisisalinewithspaces")

после удаления пробельных символов

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

removechars принимает все строковые типы (char [], wchar [], dchar [], string, wstring и dstring), но второй аргумент должен быть того же типа, что и первый.Поэтому, если вы передаете char [] в качестве первого аргумента, второй аргумент также должен быть char [].Однако вы передаете строку: ""

Простым решением было бы дублировать строку на символ []: "" .dup

removechars (line, "".dup)

Это также работает:

removechars (строка, ['\ x20'])

3 голосов
/ 07 февраля 2012

Дайте 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);
}
1 голос
/ 20 декабря 2012

Я стараюсь все, но не могу. Теперь я могу.

#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;
}
...