06用d编程--串

最简单定义:char[]是串,字符数组
d有三种数组类型.

import std.stdio;
void main() {
    char[] name;//读入一堆符
    write("名字? ");
    readf(" %s", &name);//有没有&都一样
    writeln("你好 ", name, "!");
}//用(C-Z)可以看到结果,否则<回车>没用.

readf不适合读串,读符就差不多了.
readln适合读串,就不需要%s及&运算符了.
如下:

import std.stdio;

void main() {
    char[] name;

    write("名字? ");
    readln(name);//读了行尾的'\n'的
    writeln("你好", name, "!");
}

可用std.stringstrip去掉.

import std.stdio;
import std.string;

void main() {
    char[] name;

    write("名字? ");
    readln(name);
    name = strip(name);

    writeln("你好 ", name, "!");
}

string name = strip(readln());,无参readln()返回刚才读的行.
std.formatformattedRead,可用于解析输入.

import std.stdio;
import std.string;
import std.format;

void main() {
    write("用空格分隔输入名字与年龄");
    string line = strip(readln());
    string name;
    int age;
    formattedRead(line, " %s %s", name, age);

    writeln("你名字是", name,
            ", 你年龄是", age, '.');
}

""为串,’'为符.
string, wstring,和dstring都是不变的,可修改char[],wchar[],dchar[]是不变的.

  string cannotBeMutated = "hello";
    cannotBeMutated[0] = 'H';//编译错误
//及
    char[] a_slice = "hello";//编译错误

"hello",char[]为切片,如果能编译,则能修改这个串,这个串就不是不变的了.可用.dup提供副本.

import std.stdio;

void main() {
    char[] s = "hello".dup;//副本
    s[0] = 'H';
    writeln(s);
}

切片与串是不相容的关系.有切片就不能有串.
string result = s ~ '.';编译有问题.
string result = (s ~ '.').idup;..idup用于生成不可变副本.
切片=>串(idup),串=>切片(dup).
这个utf8串,看起来的长度与实际的长度不一样.
为避免unicode问题,请使用相关文本库.

import std.stdio;

void main() {
     string s = "résumé"c;//与"résumé"一样
    wstring w = "résumé"w;
    dstring d = "résumé"d;

    writeln(s.length);
    writeln(w.length);
    writeln(d.length);//8 6 6
}

串连接

import std.stdio;
import std.string;

void main() {
    write("名字? ");
    string name = strip(readln());

    //连接:
    string greeting = "你好" ~ name;

    //附加:
    greeting ~= "! 欢迎...";

    writeln(greeting);
}
//比较串
import std.stdio;
import std.string;

void main() {
    write("输入串: ");
    string s1 = strip(readln());

    write("再输入串: ");
    string s2 = strip(readln());

    if (s1 == s2) {
        writeln("他们一样!");

    } else {
        string former;
        string latter;

        if (s1 < s2) {
            former = s1;
            latter = s2;

        } else {
            former = s2;
            latter = s1;
        }

        writeln("'", former, "' comes before '", latter, "'.");
    }
}

相应处理串函数
小写串与大写是不一样的,不过可忽略大小写比较(icmp),串是数组,所以可用数组相关函数.如std.array, std.algorithm, and std.range.

发布了381 篇原创文章 · 获赞 25 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/fqbqrr/article/details/104587159