using声明可以使程序无须专门的前缀使用名字。
using namespace :: name;
using std :: cin; std :: cout; //用到的每个名字都必须有自己的声明语句,而且每句话都得以分号结束
头文件不应包含using声明。
定义和初始化string对象C
string s1; //默认初始画,s1是空字符串
string s2 = s1;
string s3("value");
string s4(10, 'c'); //s4是 cccccccccc
如果是执行(=)实际上是拷贝初始化,编译器把等号右侧初始值拷贝到新创建的对象中,如果不用等号,则是直接初始化。
string操作
os << s 将s写到输出流os当中,返回os
is >> s 从is中读取字符串赋给s,字符串以空白符分隔,返回is
getline(is, s) 从is中读取一行赋给s,返回is
s.empty() s为空返回true,否则false
s.size() 返回s中字符的个数
s[n] 返回s中第n个字符的引用,位置从0开始计算
s1 + s2 返回s1和s2连接后的结果
s1 == s2 如果s1和s2中所含字符完全一样,则相等,对大小写敏感
<, <=, >, >= 利用字符在字典顺序比较,对大小写敏感,比较的是第一对相异字符
.length()和.size()都是遇到‘\0’结束,不包括’\0’;
sizeof()统计字符串所占空间大小,包含‘\0’, 只对字符数组有效,若要使用字符串,必须用字面值。
strlen必须将str转化为c语言使用: strlen(str.c_str())
string执行读取操作时,会忽略开头的空白,并读到下一处空白。若输入“ hello world ”,则实际为“hello”
读取未知数量的string
int main()
{
string word;
while(cin >> word)
cout << word << endl;
return 0;
}
遇到文件结束标记或非法输入结束。
保留字符串中的空白符,则使用getline,getline读取到换行符为止(读取时包含换行符,但存入string时不存换行符),触发getline函数返回的换行符实际上被丢弃了
int main()
{
string line;
while(getline(cin, line))
cout << line << endl;
return 0;
}
size函数返回的是一个string :: size_type类型的值,是一个无符号类型的值,且能足够存下任何string对象的大小。
如果一条表达式中已经有了size函数尽量不使用int,以避免混用int和unsigned可能出现的问题。
注:c++中字符串字面值并不是标准库类型string的对象。
cctype头文件的函数
isalnum(c) 当c是字母或数字为真
isalpha(c) 当c是字母为真
iscntrl(c) 当c是控制字符时为真
isdigit(c) 当c是数字时为真
isgraph(c) 当c不是空格但可打印时为真
islower(c) 当c小写为真
isprint(c) 当c可打印(即c是空格或具有可视形式)为真
ispunct(c) 当c是标点符号为真
isspace(c) 当c为空白(即空格、横向制表符、回车符、换行符、进纸符)为真
issupper(c) 当c大写为真
isxdigit(c) 当c为十六进制为真
tolower(c) 输出小写
toupper(c) 输出大写
Vector初始化
vector<T> v1
vector<T> v2(v1) / vector<T> v2 = v1
vector<T> v3(n, val) v3包含了n个重复元素,值都为val
c+11新增列表初始化
vector <string> articles = {"a", "an", "the"};
引用不可以成为vector的元素,因为其不是对象。
只能使用直接初始化,不可以使用拷贝初始化(vector之间的拷贝是可行的,但要保证类型相同)
迭代器
通过begin返回指向第一个元素/字符的迭代器。
end返回指向容器/string对象“尾元素的下一位置”的迭代器,没有实际含义,仅是个标记,表示已处理完容易中所有元素。
若容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
迭代器的运算符
*iter 返回迭代器iter所指元素的引用
iter->mem 解引用,等价于 (*iter).mem
++iter 指向容器下一元素
--iter 指向上一元素
iter1 == iter2 若两个迭代器指示的是同一个元素或都是同一容器的尾后迭代器,则相等
迭代器类型
vector<int> v;
const vector<int> cv;
auto it1 = v.begin(); //it1的类型是vector<int>::iterator
auto it2 = cv.begin(); //it2的类型是vector<int>::const_iterator
c+11新引入,cbegin和cend返回的是vector::const_iterator,用于只读不写的操作对象。
如果迭代器指向的容器位置在另一个迭代器所指位置之前,则说前者小于后者。
迭代器和一个整数值相加(相减),返回值是向前(向后)移动了若干位置的迭代器。
两个迭代器的距离类型是difference_type
数组
数组中的维度必须是常量表达式。拷贝和复制数组不允许。
string sa[10]; //sa数组为空
int ia[10]; //ia数组含有10个整数,皆为0
int main(){
string sa2[10]; //sa2数组为空
int ia2[10]; //ia2数组含有10个整数,在函数体内,值不确定
}
函数体内的局部变量分配在栈里,定义变量只是给了它一个临时的地址,而地址中原来是有数据存在的,是未知的不确定的
c+11新引入,begin/end函数,定义在iterator头文件中
int ia[] = {0,1,2,3,4,5,6,7,8,9};
int *beg = begin(ia); //指向ia首元素
int *last = end(ia); //指向arr尾元素的下一位置的指针
C风格字符串的函数
strlen(p) //返回p长度,不计入空字符
strcmp(p1,p2) //如果p1==p2,返回0;如果p1>p2,返回正值;如果p1<p2,返回负值
strcat(p1,p2) //将p2附加到p1后,返回p1
strcpy(p1,p2) //将p2拷贝给p1,返回p1
比较字符串
string s1 = /..../
string s2 = /.../
if(s1 < s2) //可比较
const char ca1[] = /..../
const chat ca2[] = /.../
if(ca1<ca2) //不可比较,两个指针非指向同一对象
if(strcmp(ca1,ca2) < 0 ) //正确
使用范围for语句处理多维数组
https://blog.youkuaiyun.com/timchaosh/article/details/66478161
本文详细介绍了C++中字符串(string)的操作方法,包括初始化、读取、比较及常用函数。同时,深入探讨了vector容器的使用,包括初始化、迭代器的运用,以及与string类型的区别。此外,还讲解了C风格字符串的处理技巧和数组的基本概念。
1194

被折叠的 条评论
为什么被折叠?



