c++中的string(2)
字符串本质上是双引号中的字符集合。
将鼠标放在带马上可以看到,虽然我们的字符串包含六个字母,但是他的长度为7,这是因为字符串结尾需要一个标志位,表示字符串的结束,这个标志就是\0,如果将"\0"加入到字符串中间,那么打印时就会出现如下效果
#include<iostream> #include<string> int main() { "Wangtn"; std::cout << "Wang\0tn" << std::endl; std::cin.get(); }
在内存中进行查看
#include<iostream> #include<string> #include<stdlib.h> int main() { const char name[8]="Wang\0tn"; std::cout << name << std::endl; std::cin.get(); }
可以看到有两个".",几种不同char类型
#include<iostream> #include<string> #include<stdlib.h> int main() { const char* name = "Wangtn";//utf8 1byte per character const wchar_t* name2 = L"Wangtn"; const char16_t* name3 = u"Wangtn";//utf16 2byte per character const char32_t* name4 = U"Wangtn";//utf32 4byte per character std::cin.get(); }
字符串拼接,c++11提供了更简洁的方法,不再需要使用强制类型转换
std::string name=std::string("Wangtn")+"sss";
#include<iostream> #include<string> #include<stdlib.h> int main() { using namespace std::string_literals; std::string name = "Wangtn"s + "sss"; std::wstring name1 = L"Wangtn"s + L"sss"; std::u32string name1 = U"Wangtn"s + U"sss"; std::cin.get(); }
原样打印字符串
#include<iostream> #include<string> #include<stdlib.h> int main() { const char *example = R"(Line1 asc Line2 Line3)"; std::cout << example << std::endl; std::cin.get(); }
另一种写法
#include<iostream> #include<string> #include<stdlib.h> int main() { const char *example = "Line1\n" "sss\n" "ssssss"; std::cout << example << std::endl; std::cin.get(); }
无情的摸鱼机器