字符串输入ios
一、单个单词可以直接用std::cin,因为:std::cin读取并忽略开头所有的空白字符(如空格,换行符,制表符)。读取字符直至再次遇到空白字符,读取终止。git
因此cin仅仅能读取单个单词。显然可以屡次使用cin来获取多个单词;数组
二、多个单词使用函数std::getline(std::cin, s)请看如下代码:app
#include <iostream> #include <string> int main() { std::string line; // empty string while(std::getline(std::cin, line)) {
// read line at time until end-of-file std::cout << line << std::endl; // write s to the output } return 0; }
Name: getline函数
这个函数接受两个參数:一个输入流对象和一个 string 对象。getline 函数从输入流的下一行读取,并保存读取的内容到不包含换行符。和输入操做符不同的是,getline 并不忽略行开头的换行符。仅仅要 getline 遇到换行符,即使它是输入的第一个字符,getline 也将中止读入并返回。假设第一个字符就是换行符,则 string 參数将被置为空 string。ui
由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。spa
Returns true if s is empty; otherwise returns false
假设 s 为空串,则返回 true,不然返回 false。code
Returns number of characters in s
返回 s 中字符的个数orm
Returns the character at position n in s; positions start at 0.
返回 s 中位置为 n 的字符,位置从 0 開始计数对象
【注意:一、引用下标时假设超出下标做用范围就会引发溢出错误。相同不会报错。二、索引的实际数据类型是类型 unsigned 类型string::size_type。
】
#include <iostream> #include <string> int main() { std::string s = "hello world"; std::cout<<s<<std::endl; for (std::string::size_type ix = 0; ix != s.size(); ++ix) s[ix] = '*'; std::cout<<"Now s is:"<<s<<std::endl; std::cout<<"s's len is:"<<s.size()<<", s[12]="<<s[100]<<std::endl; return 0; }
注意:循环中使用了std::string::size_type ix = 0;请使用string内置类型size_type来操做。因为int型可能不够string的长度,因此内置类型size_type(实际可以以为是unsigned)被建立,保证各机器的兼容性,避免溢出(和下标溢出可不是一回事)。
不论什么存储 string 的 size 操做结果的变量必须为 string::size_type 类型。特别重要的是,还要把 size 的返回值赋给一个 int 变量。
Returns a string equal to the concatenation of s1 and s2
把 s1 和s2 链接成一个新字符串,返回新生成的字符串
【备注: 可以连续加,和Python相似。
string s3 = s1 + ", " + s2 + "\n";。
注意:当进行 string 对象和字符串字面值混合链接操做时,+ 操做符的左右操做数必须至少有一个是 string 类型的【想象下级联也就知道这确实是有道理的】。----一、也就是说+链接必须保证前两个有一个为string类型!二、字符串字面值不能直接相加,字符串字面值和string是不一样类型的,字符串里面没有空字符'\0'。(更新于2014.06.24)】
Replaces characters in s1 by a copy of s2
把 s1 内容替换为 s2 的副本
【备注:。它必须先把 s1 占用的相关内存释放掉,而后再分配给 s2 足够存放 s2 副本的内存空间,最后把 s2 中的所有字符拷贝到新分配的内存空间。
】
Returns true if v1 and v2 are equal; false otherwise
比較 v1 与 v2 的内容,相等则返回 true,不然返回 false
Have their normal meanings
保持这些操做符惯有的含义
咱们经常要对 string 对象中的单个字符进行处理,好比。一般需要知道某个特殊字符是否为空白字符、字母或数字。下面 列出了各类字符操做函数。适用于 string 对象的字符(或其它不论什么 char 值)。这些函数都在cctype 头文件里定义。
True if c is a letter or a digit.假设 c 是字母或数字,则为 True。
true if c is a letter.假设 c 是字母,则为 true。
true if c is a control character.假设 c 是控制字符。则为 true
true if c is a digit.假设 c 是数字,则为 true。
true if c is not a space but is printable.假设 c 不是空格,但可打印,则为 true。
true if c is a lowercase letter.假设 c 是小写字母,则为 true。
True if c is a printable character.假设 c 是可打印的字符,则为 true。
【注意:可打印的字符是指那些可以表示的字符】
True if c is a punctuation character.假设 c 是标点符号,则 true。
【注意:标点符号则是除了数字、字母或(可打印的)空白字符(如空格)之外的其它可打印字符】
true if c is whitespace.假设 c 是空白字符。则为 true。
【注意:空白字符则是空格、制表符、垂直制表符、回车符、换行符和进纸符中的随意一种】
True if c is an uppercase letter.假设 c 是大写字母。则 true。
true if c is a hexadecimal digit.假设是 c 十六进制数,则为 true。
If c is an uppercase letter, returns its lowercase equivalent; otherwise returns c unchanged.假设 c 大写字母。返回其小写字母形式,不然直接返回 c。
If c is a lowercase letter, returns its uppercase equivalent; otherwise returns c unchanged.假设 c 是小写字母,则返回其大写字母形式。不然直接返回 c。
【注意:ctype.h是定义在C标准库中的头文件。cctype 事实上就是利用了 C 标准库函数。C 标准库头文件命名形式为 name 而 C++ 版本号则命名为 cname ,少了后缀,.h而在头文件名称前加了 c 表示这个头文件源自 C 标准库。所以,cctype 与 ctype.h 文件的内容是同样的,仅仅是採用了更适合 C++程序的形式。特别地,cname 头文件里定义的名字都定义在命名空间 std 内,而 .h 版本号中的名字却不是这样。一般。C++ 程序中应採用 cname 这样的头文件的版本号,而不採用 name.h 版本号,这样。标准库中的名字在命名空间 std 中保持一致。
使用 .h 版本号会给程序猿带来负担,因为他们必须记得哪些标准库名字是从 C 继承来的,而哪些是 C++ 所特有的。】
下面总结更新于2014.10.01,来源于经典教材。
当中:s和str是字符串string,ca是一个字符数组,str_ca是一个字符串或者一个字符数组,str_ca_ch是一个字符串、字符数组或一个字符,ch是一个字符。n、n一、n二、pos一、pos2是整数。
返回s获取的存储容量;
返回s的长度;
假设s没有包括字符则返回true。不然返回false;
返回s可能的最大长度;
将str_ca加入到s的结尾,返回s;
将ca的前n个字符加入到s的结尾,返回s;
将ch的n份拷贝加入到s的结尾,返回s;
将str的拷贝插入到s的pos位置,返回s。
将str中从pos2位置開始的n个字符插入到s的pos1位置。返回s。【假设n大于str的长度。不会有问题。没有溢出错误。仅仅会拷贝到str的末尾】
将ca的前n个字符插入到s的pos位置,假设n被省略,则插入ca中所有的字符到pos位置,返回s;
将字符ch的n个拷贝插入到s的pos位置。返回s;
删除s中从pos開始的n个字符(默认pos为0),返回s;
将s中pos1位置開始的长度为n1的字符串替换为str【假设n1太大,从pos到s结尾的所有字符将被替换】。返回s;
和上面同样,仅仅只是取ca的前n2个字符。返回s;
交换s和str的内容分。返回为void。
支持+ +=操做符。
将str_ca的一份拷贝赋予s。返回s。
将ca的前n个字符构成的字符串赋予s。返回s;
将n个ch组成的字符串赋予s,返回s;
返回s中从pos(默以为0)開始的,有n个字符组成的s的子串的拷贝。
返回s中第一个大于等于pos的位置,并且从这个位置的下一个字符開始s中字符和str_ca_ch中对应字符匹配。假设没有这种位置则返回npos。pos默以为0
返回s中大于等于pos的第一个和str_ca_ch中随意字符匹配的字符的位置,假设没有这种位置则返回npos,pos的默认值为0
返回s中大于等于pos的第一个和str_ca_ch中随意字符都不匹配的字符的位置,假设没有这种位置则返回npos。pos的默认值为0
返回s中小于等于pos的最大的一个和str_ca_ch中随意字符匹配的字符的位置,假设没有这种位置则返回npos,pos的默认值为0
返回s中小于等于pos的最大的一个和str_ca_ch中随意字符都不匹配的字符的位置,假设没有这种位置则返回npos,pos的默认值为0
返回s中最后一个小于等于pos的位置,并且从这个位置開始的str_ca_ch.size()个字符和str_ca_ch中对应的字符匹配。假设没有这种位置则返回npos。pos默以为npos
支持上述 <、<=、>、>=、==、!=操做符。
返回值为正、0、负
返回一个常字符数组。这个数组包括存储在s中字符。以一个空字符结束;
返回一个常字符数组。这个数组包括存储在s中字符,但没有以空字符结束。
将charArray替换为s中从pos開始的n个字符,假设pos被省略了,即从0開始,假设n太大。那么拷贝字符直到s结束,返回终于拷贝的字符个数。
备注:data()和c_str()都可以被用来从一个文件名称中提取open操做所需要的字符数组,此部份内容可能会在兴许文件操做中接触到。