(一个)
string str = "Hello\nWorld";
Run Code Online (Sandbox Code Playgroud)
当我打印时str,输出是:
Hello
World
Run Code Online (Sandbox Code Playgroud)
(b)中
string str;
cin >> str; //given input as Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
当我打印时str,输出是:
Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
(a)和(b)有什么区别?
Sla*_*ica 58
当提供控制字符时,C++编译器具有某些规则 -
文档.如您所见,当您\n在字符串文字中指定时,它将被编译器替换为换行符(ASCII的值为0xa).因此,而不是2个符号,\并且n,您得到一个带有二进制代码0xa的符号(我假设您使用ASCII编码),这使得控制台在打印时将输出移动到新行.当你读一个字符串的编译器是不参与,你的字符串的实际符号\,并n在里面.
ere*_*non 15
当在字符串文字中指定时,"\n"将被转换为匹配的ascii代码(0x0a在linux上),并按原样存储.它不会被存储为反斜杠,后面是文字n.转义序列仅为方便起见,允许带有嵌入换行符的字符串文字.
另一方面,在终端中运行的shell不会进行这样的替换:它提交一个文字反斜杠n,并且将这样打印.
要打印换行符,请输入换行符:
$ echo "Hello
World" | ./your-program
Run Code Online (Sandbox Code Playgroud)
Kri*_*ary 11
cout <<"Hello \nworld"中的字符串由编译器转换为编译字符串,其中转义码转换为字符,因此执行时的cout函数不会看到两个字符串"\n"字符串,而是等效代码下一行字符.
但是cin 在运行时获取每个类型字符的字符串,并且不转换转义码.因此,如果要转换这些转义码,则必须进行替换功能.
cin不包括C++编译器.字符串文字中的转义序列是C++的词法分析器的一个特性,它是C++编译器的一部分.Streams或多或少会给你来自操作系统的内容(他们可能会根据操作系统进行一些CRLF - > CR翻译或类似操作,但就是这样).
当我从cin读取时,为什么转义字符不起作用?
因为流阅读器被定义为这种方式.核心是每个字符分别阅读.只有更高级别的功能才能为角色提供额外的意义.
当编译器处理字符串文字时"Hello\nWorld",其文件阅读器也会传递两个字符.只有C++编译器/解析器根据语言规则将它们转换为一个字符.
| 归档时间: |
|
| 查看次数: |
3233 次 |
| 最近记录: |