当前位置: 首页 > news >正文

多行字符串文本?各式各样的字符串类型?字符和字符串?

目录

多行字符串文本

各式各样的字符串类型

字符和字符串

字符类型用什么形式表示?

字符和字符串单引号还是双引号?

多行字符串

字符的输出形式

'a'和"a"的区别

多个字符的字符类型

字符串换行


多行字符串文本

有些编程语言,又把这种多行字符串原样展示称为原生字符串。

  • C/ObjC/C++语言提供的多行字符串字面量表达方法稍显不友好。

char *lines =

"This is the first sentence."

"\n This is the second sentence."

"\n  This is the third sentence.";

如上会显示3行文本,后面的每行开头会额外多一个空格。

  • Python/Swift/Kotlin 提供了更加简洁的三引号模式:

lines = """

    This is the first sentence.

     This is the second sentence.

      This is the third sentence.

    """

lines输出的结果和C语言输出的类似,它不需要额外增加'\n'表示换行,就像是原文输出。

需特别注意,第二个三引号"""指示字符串文本左侧对齐位置,即,如果第二个三引号"""左移一个空格,那么上面三行文本是输出左侧都多一个空格。

  • 仓颉 也提供三引号模式,但特别要求第一组三引号后面一定需要换行。|
    另外,也提供了原始字符串模式:一个或多个#开头,一个双引号,后面紧跟着字符串,结尾是一个双引号和一个或多个#符号(#符号个数和开头的#个数一样)。例如:
    #"abc"#

    ###"
    abcd
    "###
  • Rust提供了原始字符串风格,一样可以可见即所得:
    let lines = r#"
    This is the first sentence.
     This is the second sentence.
      This is the third sentence."#;

各式各样的字符串类型

  • C/ObjC/C++支持原始字符串指针char *指示字符串首地址或char []数组存储字符串。
    ObjC还支持NSString字符串以@开头,例如@"hello",它属于Foundation框架字符串类库。
    C++ STL模板库封装char *的string更好用。
    NSString字符串少写了@开头,会提示编译错误。
  • Swift/Java/仓颉/Rust/VB/Kotlin:String
  • C#/Go: string
    不同的是,Go字符串是值类型。
  • Python/JS 的字符串是用单引号或双引号括起来,例如'hello' 或 "good".
  • JS有点复杂,字符串分成基本字符串和字符串对象。普通字符串字面量或String()函数都会产生基本字符串,用new String()创建的是字符串对象,这种和普通C++/C#创建的字符串对象类似,有自己单独的地址。
    • 用eval函数处理基本字符串和字符串对象是截然不同的,基本字符串如果有表达式运算会直接计算,而字符串对象会按对象处理。
      例如:eval("3+2") 返回 5,而eval(new String("3+2")) 返回字符串 "3+2".
  • Pascal 字符串类型是string.

字符和字符串

单个字符(一般被''包围)和单个字符的字符串(一般被'包围)看起来很像,实则可能天差地别。脚本语言可以把任何字面量看成字符串,它的处理更简单优雅,对于编译型语言,程序员必然要面对差异。

字符类型用什么形式表示?

字符类型和普通整型、标识符不同,它必须用特别的形式以区分开。

  • 单引号
    • C/ObjC/C++/Java/C#/仓颉/Pascal 等
      例如'ab'是不合法的。
  • 单引号或者双引号
    • Python/Shell/SQL/JS/PHP/Fortran 等

字符和字符串单引号还是双引号?

  • C/C++ 字符是char类型,用单引号,本质就是整型,字符串是双引号。单个字符的字符串代表指针或者地址,指向此字符串。
  • Java/C# 字符串也是双引号,只是字符串被当成引用类型(本质还是地址)。
  • Python对于单引号'和双引号"包裹的字符看成一样,被当做字符串处理。
  • Shell脚本单引号和双引号都代表字符串,但单引号会完全当原本的字符串,双引号内部的变量和命令会被展开。
  • SQL语言不区分单引号和双引号。
  • JavaScript对于字符串类型,不区分单引号和双引号。
  • PHP默认可以用双引号或单引号包裹字符串,为了方便,双引号里面包含单引号字符不需要转义;单引号包裹字符串,内部的任何字符原文输出,注意,内部字符串还包含单引号就必须转义。
  • 仓颉字符串是双引号。
  • 更为古老的Fortran语言,字符串用单引号和双引号包起来是相同含义,字符类型其实是字符串长度为1的实现:CHARACTER(LEN=1).
    • character(2) :: str = "ab"和character(2) :: str = 'ab'都代表字符串ab.
      Fortran还可以用nHxxxx格式表达字符串,例如str = 6HHello代表字符串"Hello".
  • Kotlin 单引号表示字符,双引号表示字符串。
  • VB用双引号表示字符串。
  • Pascal 字符串也是用单引号,不能用双引号。

多行字符串

为了更方便表达多行字符串,不少编程语言提供了形如三引号或者原始字符串标志。

  • 仓颉提供3个双引号开头和结尾的设计。
  • PHP 4引入了<<<多行字符串。

字符的输出形式

  • C/ObjC/C++可以用字符也可以用整数展示,分别对应%c, %d.

'a'和"a"的区别

  • 在单引号表示字符,双引号标识字符串的语言中,二者是截然不同的类型。
  • 假设语言兼容ASCII码,C/ObjC/C++ 'a'仅仅是单字节字符,"a"包含字符'a'和'\0'两个字符。
  • 对于单引号和双引号功能一样的语言,二者没区别。
  • C语言 printf('a') 的结果是未知的,因为'a'是个整数,而非字符串地址。

多个字符的字符类型

  • 早期一些C语言编译器允许形如 '123' 这种的字符定义,实际上的数值可能是第一个字符,或者最后一个字符。但这些都不重要,不要试图在当今的C编译器写上面的代码。
    • 以clang 14为例,它同样支持:char c = 'ab'; 不过有警告:multi-character character constant [-Wmultichar],implicit conversion from 'int' to 'char' changes value from 24930 to 98.
      结果是c等于最后一个字符'b'的数值:98.
      当然,这种写法并不推荐。

字符串换行

一般而言,一个字符串字面量需要在同一行,不能断然换行,原因有二。

  • 简化编译器设计,不需要处理换行后还是字符串的延续。
  • 换行的字符串可能误导程序员,以为字符串真的有换行。

C/ObjC/C++/Kotlin 等语言均遵循此原则。


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关文章:

  • GO 语言进阶之 时间处理和Json 处理
  • 实战设计模式之访问者模式
  • Hertz+Kitex快速上手开发
  • 揭开C语言指针的神秘面纱:地址、变量与“指向”的力量
  • 【Python 元祖】 Tuple 核心知识点
  • QT单例模式简单讲解与实现
  • Redis哨兵模式,CLUSTERDOWN Hash slot not server 解决
  • 整数反转(7)
  • 《1.1_3_2 电路交换、报文交换、分组交换的性能分析|精讲篇》
  • 性能优化关键:link、script和meta的正确打开方式
  • 网络基础学习
  • 【Linux网络】UDP套接字【实现英汉转化】
  • 探索容器技术:Docker与Kubernetes的实践指南
  • ​​IIS文件上传漏洞绕过:深入解析与高效防御​
  • 关于PHP的详细介绍,结合其核心特点、应用场景及2025年的技术发展趋势,以清晰的结构呈现:
  • TCP 的三次握手
  • 构造题(Constructive Problem)
  • 历年福州大学保研上机真题
  • 【论文阅读】KIMI-VL TECHNICAL REPORT
  • C语言中的寄存器:理解与应用
  • 品牌建设是指/seo优化标题 关键词
  • 广东人才网官方网站招聘信息/可以免费打开网站的软件
  • 南宁小程序定制开发公司/南山网站seo
  • 国外建筑网站app/站长之家seo
  • 福田网站建设哪家便宜/软文推广的100个范例
  • 邢台做网站咨询/怎样制作网页新手自学入门