String类与二维字符数组

string类

C语言风格字符串的特点:

  • 执行拷贝、比较等操作,都需要调用函数
  • 字符串长度大于分配空间时,下标会越界

string类也叫字符串,是C++标准库把字符数组封装起来的类。而且,string类具有更多的特性功能

声明string类型的格式如下:

//采用  类型 变量名;
string str;

string类型的初始化格式如下:

//采用  类型 变量名;
string str = "hello world";

string类的基本操作

表达式功能
s1 += s2将s2拼接在s1后面
s1 = s2将s2的值赋给s1
s1 == s2判断2个字符串是否相等
s1 < s2判断s1是否小于s2
s1[i]访问s1中下标为i的字符

string类的基本功能

表达式功能
s1.length()/s1.size()返回s1字符串的长度
s1.substr(a,b)截取s1中下标为a到b的字符串
s1.insert(a,'s')在s1中下标为a的位置插入字符s

使用案例

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1 = "Hello";
    string s2 = "World";

    cout << "s1的长度:" << s1.length() << endl;
    cout << "s2的长度:" << s1.size() << endl;

    cout << "截取s1的下标2到4的元素:" << s1.substr(2,4) << endl;

    cout << "将s1和s2进行连接:" << s1 + "," + s2 << endl;
    
    s1.insert(5,'c');
    cout << "在s1的下标5的位置插入字母c:" << s1 << endl;

    return 0;
}

字符串的输入

使用cin来输入字符串,当字符串中包含空格的时候输入就会停止,后面的数据就会接收不到。

//数组字符串的输入格式:
cin.getline(数组名,长度);
gets(数组名)

//string字符串的输入格式:
getline(cin,string变量名);

输入案例

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1;

    //遇到空格就会停止
    cin >> s1;
    cout << s1 << endl;
}
#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1;

    //会读取空格
    getline(cin,s1);
    cout << s1 << endl;
}

问题

问题2.1

输入2行不超过100,只包含数字和空格的字符串,编写程序判断在忽略空格的前提下,2个字符串是否一样,如一样输出“YES”,否则输出“NO”

输入:hel lo hello

输出:YES

问题分析:

1.由于输入可能会有空格,因此使用getline()函数来获取输入

2.对两个字符串进行遍历,如果遇到空格,则跳过,发现有不同的字符存在,则结束循环

3.输出最后的结果

示例代码

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1;
    string s2;
    int i = 0,j = 0;    //定义两个变量,用于遍历


    getline(cin,s1);    //用getline获得两个输入
    getline(cin,s2);

    cout << s1 << endl;
    cout << s2 << endl;

    while(i < s1.length() || j < s2.length()){  //对两个字符串进行遍历
        if (s1[i] == ' '){  //发现s1有空格,则跳过
            i++;
        }
        if(s2[j] == ' '){   //发现s2有空格,则跳过
            j++;
        }

        if (s1[i] != s2[j]) break;  //发现有不同的字符,则退出遍历

         i++;j++;

    }

    if (i == s1.length() || j == s1.length()){  //其中一个已经遍历完成,则说明是相同的,否则不相同
        cout << "YES" << endl;
    }else{
        cout << "NO" << endl;
    }
}

二维字符数组

在有的时候,我们可能需要存储多句话,我们可以定义多个字符串来存储

char s1[100] = "";
char s2[100] = "";
char s3[100] = "";

cin >> s1;
cin >> s2;
cin >> s3;

但如果我们要存储很多句话,我们不能单个去定义,我们可以使用二维字符数组

char s[10][100];

以上定义了一个二维字符数组,表示10个大小为100的字符数组

我们可以通过循环的方式不断获取10个输入

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    char s[10][100];

    //因为有10个大小为100的字符数组,需要进行10次输入
    for (int i = 0;i < 10 ;i++){
        cin >> s[i];
    }

    //输出结果
    for (int i = 0;i < 10 ;i++){
        cout << s[i] << endl;;
    }
    
}

课后练习

输入一行包含空格且长度不超过100的字符串,统计其中的大写和小写字母的个数,如果大写字母多就输出“Y”,小写字母多久输出“N”,相等输出“O”

输入:Good

输出:N

最后修改:2022 年 03 月 10 日
如果觉得我的文章对你有用,请随意赞赏