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.string
的strip
去掉.
import std.stdio;
import std.string;
void main() {
char[] name;
write("名字? ");
readln(name);
name = strip(name);
writeln("你好 ", name, "!");
}
string name = strip(readln());
,无参readln()
返回刚才读的行.
std.format
的formattedRead
,可用于解析输入.
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, 和 std.range
中相关函数…
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现