C++学习过程记录day3(string)

C++学习过程记录day3(string),第1张

1、标准库类型 string

初始化string对象一般有直接初始化和拷贝初始化

直接初始化 string s5("hello")

拷贝初始化 string s6 = "hello"

直接初始化第二种 string s7 (10,'C ')s7的内容是CCCCCCCCCC

拷贝初始化 string s8 = string(10 ,'C')

2 、string 对象上的 *** 作

string *** 作
is >> s从is中读取字符串赋值给s,字符串以空白分割,返回is
s.empty()s为空返回true ,否则返回false
s.size()返回s中的字符串个数
s1 != s2等性判断对字母的大小写敏感
< <= > >=利用字符在字典中的顺序进行比较,对大小写敏感

3、读取未知数量的string对象

#include 
#include 

int main()
{
    string word;
    while(cin >> word )
    {
        cout << word << endl;
    }
    return 0;
}

4 、使用getline 读取一整行

有些时候我们希望能在最终得到的字符串中保留输入时的空白符,这个时候就可以用getline代替cin >> ;getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意此时换行符也被读入了)

#include 
#include 

int main()
{
    string line;
    while(getline(cin , line))
        cout << line << endl;
    return 0;
}

5、string的empty和size *** 作

只输出非空的行

#include 
#include 

int main()
{
    string line;
    while(getline(cin , line))
        if(!line.empty())
            cout << line << endl;
    return 0;
}

6、两个string相加

string s1 = string s2 + string s3;

负责把右侧的string对象的内容追加到左侧的string 对象的后面

7、字面值和string对象相加

#include 
#include 

string s1 = "hello", s2 = "world";
string s3 = s1 + "," +s2 + "\n";
string s4 = s1 + ",";
string s5 = "hello" + ","    //编译会出错,两个运算对象都不是字符串,而是字面值

//其实能够相加的只有字符串和符号

8、处理每个字符

遍历去处理string中的每个字符

for ( declaration : expression )

        statement

其中的expression 是一个对象,代表一个序列,declaration部分负责定义一个变量,该变量用于访问序列中的基础元素,每次迭代,declaration部分的变量都会被初始化为expression 对象的下一个元素值。

string str ("some string");
for (auto c : string)
    cout << c <

使用稍微复杂一点的例子,使用范围for语句和ispunct函数来统计string对象中标点符号的个数

string s("Hello World!!!");
decltype(s.size()) punct_cnt = 0;
for(auto c : s)
    if(ispunct(c))
        ++punct_cnt;
    cout << punct_cnt << endl;

使用范围语句for改变字符串字符

想要改变string对象中的字符的值,必须把循环变量定义成引用类型;

使用引用做循环控制时,这个变量实际上被依次绑定到序列的每个元素上;

string s("Hello world!!!");
for(auto &c : s)
    c = toupper(c);
cout << s <

只处理一部分字符

下标运算符(索引)

string s("some string");
if(!s.empty())
    s[0] = toupper(s[0]);

使用下标执行迭代

string s ("some string")
for (decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index)
    s[index] = toupper(s[index]);
    
输出是 SOME string

cin是以空格作为默认的截断符的,而getline默认以回车‘\n’作为截断符,可以指定getline的截断符类型。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/2991208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)