i有两个字符串s和s2,其中s被初始化为s2作为用户输入。 两个字符串都具有如下相同的字符: “ \ t \ n \ t \ n asd \ tnhy \ nhgf \ twerdsff \ tdfd \ nsgsgb hg” 但是s.substr(0,2)显示为空白,而s2.substr(0,2)显示\ t
string s = "\t \n \t \n asd \tnhy \nhgf \twerdsff \tdfd\nsgsgb hg";
cout<<s.substr(0,2)<<endl;
if(s.substr(0,2)=="\t")
cout<<"screwed one \n";
string s2;
getline(cin,s2);
cout<<s2.substr(0,2)<<endl;
if(s2.substr(0,2)=="\t")
cout<<"screwed two \n";
我期望相同的行为。 并且没有打印出“拧一个”或“拧两个”。 在屏幕上看到\ t后,我也希望显示“拧紧两个”
答案 0 :(得分:1)
在C ++中,escape sequences用单个反斜杠(\
)标记。 \t
默认情况下解释为单个列表。
如果要准确插入序列\t
(而不是列表),可以通过两种方法(很好,但最常见的是两种):
std::string s = R"eos(\t \n \t \n asd \tnhy \nhgf \twerdsff \tdfd\nsgsgb hg)eos";
这里eos
用作分隔符,但可以是任何东西。重要的是它也必须出现在末尾(使用)
)。原始字符串是“所见即所得”功能。分隔符之间的所有内容都将与您输入的一样在最终字符串中。
std::string s = "\\t \\n \\t \\n asd \\tnhy \\nhgf \\twerdsff \\tdfd\\nsgsgb hg";
可以将反斜杠转义,从而在字符串中产生一个反斜杠。
但是,如果您希望从用户输入中获取空格,则没有内置方法可以做到。您必须解析该字符串,寻找任何\
并将其与下一个具有相关字符的字母一起替换。
答案 1 :(得分:0)
好吧,这是关于输入中使用的字符。例如'\t'
是一个代表制表符的char,在任何情况下,它都与两个'\'
和't'
分开的字符的顺序不同。