string基本
使用std::cin读取string,自动从第一个非空白字符开始,直到遇到空白字符结束
#include <iostream> #include <string> int main() { std::string str ; std::cin>>str; std::cout<<"------------------"<<std::endl; std::cout<<str; return 0; }
输入的是 " C++是世界上最棒的语言 "
循环读取数量不定的string(还是会忽略掉开始和结束的空白)
#include <iostream> #include <string> int main() { std::string word ; while(std::cin>>word) std::cout<<"word= "<<word<<std::endl; return 0; }
使用getline读取string(不会忽略开始和结束的空白,从行首一直读取到换行符,包括换行符,但是不把换行符拷贝到string,
实际上读取了换行符,但是丢弃了。如果第一个字符就是换行符,则string为空)
#include <iostream> #include <string> int main() { std::string line ; while(getline(std::cin,line)) std::cout<<line<<std::endl; return 0; }
改进,使用empty()方法,过滤掉空string
#include <iostream> #include <string> int main() { std::string line ; while(getline(std::cin,line)) if(!line.empty()) std::cout<<line<<std::endl; return 0; }
改进,只输出大于3个字符的string
#include <iostream> #include <string> int main() { std::string line ; while(getline(std::cin,line)) if(line.size()>3) std::cout<<line<<std::endl; return 0; }
size()方法,一个中文占两个
#include <iostream> #include <string> int main() { std::string s1 = "C++" ; std::string s2 = "最好的语言"; std::cout<<s1.size()<<std::endl; std::cout<<s2.size()<<std::endl; return 0; }
注意:size()返回的不是int而是string::size_type类型,只需记住,它是一个无符号类型,用于比较时很重要
(例如和一个很小的负数n比较时,n会转化为一个很大的无符号数)
#include <iostream> #include <string> int main() { std::string s1 = "C++是中国的" ; int n = -1 ; if(s1.size()<n) std::cout<<"耐人寻味"<<std::endl; return 0; }
快速构建相同字符的string
#include <iostream> #include <string> int main() { std::string s1(10,'C'); std::cout<<s1<<std::endl; return 0; }
拼接string(确保每个+左右至少有一个string)
由于历史原因,为了兼容C,C++中字符串字面值和string不相同
#include <iostream> #include <string> int main() { std::string s1 = "C++"; std::cout<<s1+"是"+"世界上最完美的语言"; //std::cout<<"世界上最完美的语言"+"是"+s1; //错误 return 0; }