可变数据类型

相等性运算符== !=字符串长度所包含字符全部同
关系性运算
< <= > >=
把string对象和字符字面值及字符字面值混合在一条语句中使用,须确保每个加法运算符(+)的两侧的运算对象至少有一个是string
不能把字面值直接相加
编译器无法做到两个字面值的直接相加运算
C++中字符串字面值并不是标准库类型string对象,字符串字面值与string是不同类型
#include <iostream>

using namespace std;

//行读取
int main(int argc,const char *argv[])
{
  string line;  
  while(getline(cin,line))
{
cout << line << endl;
}    
}

//单词
int main()
{
string word;
while(cin >> word)
{
cout << word << endl;
}
}

//输出string.size > 20 的行
int main()
{
string line;
while(getline(cin,line))
{
if(line.size() > 20)
{
cout << line << endl;
}

}
}

//pass输入的空行
int main()
{
string line;
while(getline(cin,line))
{
if(!line.empty())
{
cout << line << endl;
}
}
}
string类的输入运算符>>
输出运算符
处理string对象中字符
检查string对象是否包含Space,string对象中字母改成小写,查看特定字符是否出现
cctype头文件中,定义了一组标准函数
isalnum(c)
litter number
alphanumric
字母数字True
isalphanumeric
isalnum
isalpha(c) 参数  
iscntrl()控制字符
isdigit(c) 数字
isgraph()
#include <iostream>

using namespace std;

int main(int argc,const char *argv[])
{
    char c;
    //Prompt Input#
    cout << "[Prompt input#] ";
    while(cin >> c)
    {
        if(isupper(c))
        {
            cout << "upper char c = " << c << endl;
            cout << "convert isupper to is lower: " <<char( tolower(c)) << endl;

        }
        else
        {
            cout << "lower char c = " << c << endl;
            cout << "convert to is upper: " << char(toupper(c)) << endl;
        }
    }
}

  

处理string对象每个字符,使用基于范围的for
for(range for);
遍历给定序列的每个元素并对序列每个值执行操作
for(declaration:expression)
statement;
基于范围的for
对string对象每个字符操作
语句遍历给定序列每个元素并对序列每个值执行操作
for(declaration:expression)
expression对象表示序列
declaration部分负责定义变量
declaration部分负责定义变量 变量被用于访问序列中基础元素,每次迭代,declaration部分变量被初始化w欸expression部分的下一个元素
string对象表示字符序列,string对象作为范围for语句expression 可以使用范围for语句把string对象字符每行一个输出

  

declaration部分负责定义一个变量,变量用于访问序列基础元素 每次迭代 declaration部分的变量会被初始化为expression部分的下一个元素
使用范围for语句改变字符串中的字符 改变string对象中字符,把循环变量定义成引用 所谓引用只是给定对象的一个别名 使用引用作为循环控制变量 ,变量实际被依次绑定到序列的每个元素,使用引用即能改变绑定字符
访问string对象中单个字符 使用下标迭代器
下标运算符[] 接收的参数string::size_type类型的值
参数表示要访问的字符位置
String对象的下标 >= 0 <string.size() 
使用下标访问空String引发问题
while(!string.empty())
{
cout << string[0] << endl;
}
在访问指定字符之前,检查s是否为空
只要对string对象使用下标 都有确认那个位置上确实有值
只要字符串不是常量,就能为下标运算符返回的字符赋值

string s("some string")
if (!s.empty())    //确保string
{
s[0] = toupper(s[0]);为s的第一个字符赋值

}
提供的是初始化元素值的列表,只能把初始值都放在花括号进行列表初始化,不能放在圆括号
创建指定数量的元素
用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象
用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象
vector<int> ivec(10,-1);个数 value 
vector<> intVector(count,RealValue);

vector<string> stringVector(10,"hi!");

值初始化
只提供vector对象容纳的元素数量而不用初始值,库会创建初始化值初始值由vector对象中元素的类型决定;
vector<int> ivec(10);    //10个元素,每个都初始化为0
vector<string> svec(10);    //10个元素 每个都是空string对象;
初始值,元素数量
用一个整数来初始化vector<int>,整数的函数可能是vector对象的容量
列表初始值还是元素数量
vector<int> v1(10);    //v1有10个元素,每个的值都是0
vector<int> v2{10};    //v2有1个元素,元素的值是10;
vector<int> v3(10,1);    //v3有10个元素,每个元素值都是1
vector<int> v4{10,1};    //v4有2个元素,值分别是10和1;
如果用的是圆括号,可以说提供的值是用来构造(construct)vector对象,元素的值可有可无;说明了vector对象的容量
对象容量和元素的初始值
元素的类型一定一样,多个vector的元素的值可以一样,也可能不一样
值得注意:
vector对象有size方法,用于获取对象的元素个数
vector对象的每个元素 都有一个索引,所以用于获取对于对象的值;
 vector<int> v1(10);
    //cout << v1.size() << endl;
    for(int i = 0;i < v1.size();i++)
    {
        std::cout <<v1[i] << std::endl;
    }
初始化使用花括号-在string是值,列表初始化一个含有string对象的vector 应该提供能赋予给String对象的初始值,此时不难区分到底是要列表初始化vector对象的元素还是用给定的容量值来构造vector对象;
vector<string> v5{"h1"};    //列表初始化,v5有一个元素,值为
vector<string> v6("hi") 不能使用字符串字面值构建vector对象;
vector<string> v7{10};
花括号里面的值需要元素类型一致
不能用int初始化string对象
v7 v8提供的值不能作为元素的初始化值确认无法执行列表初始化后,编译器会尝试用默认值初始化vector;
需要注意两点
初始化元素值 一定用{}或是用()构造
初始化值类型一定要与元素类型一致;
向vector对象中添加元素
对vector对象 直接初始化适用于 初始值已知且数量较少
初始值是另外一个
向vector对象中添加元素
好的处理方法先创建空vector,在运行时利用vector成员函数push_back向其中添加元素
push_back负责把一个值当成vector对象的尾元素压到pushvector对象的尾端(back)
控制变量定义成引用类型
string *p2 = &nums[0];
p2 = &nums[0];
p2存储的是对象的地址,*p2 是解除引用,获取对象的值;
大多数表达式,使用数组类型的对象其实是使用一个指向该数组首元素的指针
一些情况下数组的操作实际是指针的操作
首先定义了两个名为pbeg和pend的整数据
constexpr size_t sz = 5;
int arr[sz] = {1,2,3};
int *ip = arr &arr[0]
int *ip2 = ip + 4;
传入此类函数的指针必须指向以空字符作为结束的数组
传入此类函数的指针必须指向以空字符作为结束的数组
char ca[] = {'c','+','+'};    //不以空字符结束
原文地址:https://www.cnblogs.com/ruiy/p/6775340.html