C++基础语法3( string类,vector类)

目录

string类:

1.string的定义:

2.string属性:

3.string的输入:

4.string的遍历:

5.迭代器iterator:指针(内部指针):

6.string的赋值:

7.string的连接:

8.string的比较:

9.string的查找:

10.string的删除:

11.string的拷贝:

Vector类:


string类:

class string 实际是封装了 Char * 并提供了很多功能

头文件:

#include <iostream>
#include <string>
#include <string.h>

举例:

#include <iostream>
#include <string>
#include <string.h>

using namespace std;

class MyString
{
public:
    const char *c_str()
    {
        return p;
    }

    char at(int index)
    {
        return p[index];
    }

private:
    int _M_string_length;
    char *p

string:std提供的标准字符串处理的类 class string;(成员变量、方法)

特点:可变长(动态分配)

1.string的定义:

int main()
{
    string s("hello world!");
    string s1 = "hi world";
    string s2 = s + s1;
    const char* ptr = "hello world!";
	 string s22(ptr);
 
    s = s + s1;
    string s3("hello world");//构造函数
    string s4(10,'c'); //输出10个C
    string s5(s1); //s1的值赋给s5
    string s6 = s1;
    cout << s5 << endl;
    return 0;
}

2.string属性:

 * size():string的大小

 *max_size() 当前环境最多可容纳多少字符 string 可变长

 * length():string的长度

 * empty():判断是否为空; bool

 * capacity():返回的是string当前的容量 它的值总是会比size 大1个或多个

  * resize():重置大小

int main()
{
    string s("hello world");
    cout << "size:" << s.size() << endl;
    cout << "length:" << s.length() << endl;
    cout << "is empty:" << s.empty() << endl;
    cout << "capacity:" << s.capacity() << endl;
    s.resize(100,'a');  //memset,重置S的大小为100,不足的用a补足
    cout << s << endl;
    cout << "capacity:" << s.capacity() << endl;
    string s1 = "";
    cout << "is empty:" << s1.empty() << endl;
    return 0;
}

3.string的输入:

int main()
{
    //string转换const char * : c_str(); 兼容C语言函数接口
    string s;
    char src[1024];
    //输入方法仅三种
    cin >> s; //方法1 接收一个字符串,遇“空格”、“TAB”、“回车”就结束
    getline(cin,s); //方法2 接收一个字符串,可以接收空格并输出,需包含“#include<string>”
    cin.getline(s,5); //方法3 接收一个字符串,可以接收空格并输出
     
    //c_str():const char *
    //getline(char *src, int len);  error
    //cin.getline(src,1024);error
    //cin.getline(const_cast<char *>(s.c_str()),1024);error
    //scanf("%s",s.c_str());//c_str():const char * error
  
    cout << s << endl;

    strcpy(src,s.c_str());
    cout << src << endl;
    return 0;t
}

4.string的遍历:

int main()
{
    string s("hello world");

     for (int i = 0; i < s.size(); i++)
     {
         cout << s[i] << endl;
         cout << s.at(i) << endl;
         //[] VS at : []如果越界不报错,at越界产生异常
     }

    cout << s[100] << endl;
    cout << s.at(100) << endl; //从s的第100位开始输出,越界报错

     for (auto temp : s) //遍历
     {
         cout << temp << endl;
     }
    return 0;
}

5.迭代器iterator:指针(内部指针):

//迭代器:iterator:指针(内部指针)。遍历方法二。
string::iterator begin_it = s.begin();
string::iterator end_it = s.end();
for(auto it = s.begin(); it != s.end() ; it++){
    cout << *it << endl;
}
//反向迭代器。注意仍然使用++,因为内部已经封装好。
string::reverse_iterator begin_it = s.rbegin();
for(auto it = s.rbegin() ; it != s.rend() ; it++){
    cout << *it << endl;
}
//const迭代器。只能使用不能修改。
string::const_iterator begin_it = s.cbegin();
for(auto it = s.cbegin(); it != s.cend() ; it++){
    cout << *it << endl;                  
}
//const反向迭代器。
string::const_reverse_iterator it = s.crbegin();
for(auto it=s.crbegin(); it!=s.crend() ; it++){
    cout << *it << ' ';
}
cout << endl;

种类:正向、反向、const类型

 begin();end();

int main()
{
     string::iterator begin_it = s.begin();
     string::iterator end_it = s.end();

     cout << *begin_it << endl;
    
     if(*end_it == '\0')
     {
         cout << "end is '\0'" << endl;
     }

    string::iterator it = s.begin();

     for(auto it = s.begin(); it != s.end(); it++)
     {
         cout << *it << endl;
     }

    string::reverse_iterator it = s.rbegin();

     for(auto it = s.rbegin(); it != s.rend(); it++)
     {
         cout << *it << endl;
     }

    string::const_iterator it;
    string::const_reverse_iterator it = s.crbegin();
    for(auto it = s.cbegin(); it != s.cend(); it++)
    {
        cout << *it << endl;
    }
    cout << s << endl;
    return 0;   
}

6.string的赋值:

int main()
{
    string s = "hello world";
    string s1 = s;
    string s2;
    s2.assign("hello world");
    string s3;
    s3.assign(s,0,5);
    cout << s3 << endl; //输出hello
    string s4;
    s4.assign(s.cbegin() + 1, s.cbegin() + 5);
    cout << s4 << endl;//输出ello
    return 0;
}

7.string的连接:

int main()
{
    string s1 = "hello";
    string s2 = "world";
    string s = s1 + s2; 
    string s3 = "hello" + s1 + "world";  
    string s3 = "hello" + "world"+s1;  //错误,必须用上面的方式

    string s5;
    s5.append(s1);//把s1的内容添加到s5中
    s5.append(s2);
    return 0;
}

8.string的比较:

#include<string>

int main()
{
    string s1 = "hello";
    string s2 = "hello";

    if(s1 < s2)
    {
        cout << "s1 == s2" << endl;
    }
    return 0;
}

9.string的查找:

str.find_first_of(s) //查找目标字符串(s)中任意一个字符在str里第一次出现的位置;

str.find_last_of(s) //查找目标字符串(s)中任意一个字符在str里最后一次出现的位置;

str.find_first_not_of(s) //str中第一个不是目标字符串中任意一个字符的位置;

str.find_last_not_of(s)//str中最后一个不是目标字符串中任意一个字符的位置;

int main()
{
     string s = "This is a string";
    
     string::size_type ret;

     ret = s.find('q');

     if(ret == string::npos)
     {
         cout << "not find string" << endl;
     }

     cout << ret << endl;
    
    

    std::string str = std::string("Hello World");
    
    // strings and chars to search for
    std::string search_str = std::string("o");
    const char* search_cstr = "Good Bye!";
 
    std::cout << str.find_last_not_of(search_cstr) << '\n';
}

10.string的删除:

s.erase(起始位置,要删的个数)

int main()
{

    string s = "abdcd";
    //s.erase(1,1);
    auto it = s.erase(s.begin() + 1);
    cout << *it << endl;

    string s1 = "helll";
    for(auto it = s1.begin(); it != s1.end();)
    {
        if(*it == 'l')
        {
            s1.erase(it);
        }
        else
        {
            it++;
        }
        
        printf("*");
    }
    printf("\n");

    cout << s1 << endl;
    return 0;
}

11.string的拷贝:

int copy(char *s, int n, int pos = 0) const;
//把当前字符串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,
//返回实际拷贝的数目

示例:

int main()
{
    string s1 = "hello world!";
    char buf[100] = {0};
    s1.copy(buf,4,6);
    cout<< s1 << endl;//输出 worl
    
    return 0;
}

Vector类:

vector是将元素置于一个动态数组中加以管理的内容器,可以随机存储元素,支持vi[i]与vi.at(i)的方法直接存取。

#include <iostream>
#include <vector>//代替C中的数组
using namespace std;

class Student
{
public:

};

int main()
{
    vector<int> v1 = {1,2,3,4,5};//存入数据方法1

    vector<int> v2;//存入数据方法2
    v2.push_back(1);
    v2.push_back(2);
    v2.push_back(3);

    vector<string> v3;//存入string 类型数据
    v3.push_back("hello");
    v3.push_back("world");

     for(int i = 0 ; i < v1.size(); i++)//遍历
     {
         cout << v1[i] << endl; //越界不报错
         cout << v1.at(i) << endl; //越界报错
     }

    vector<int>::iterator it;
    vector<string>::iterator it2;
    vector<Student>::iterator it3; //支持自建类

    for(auto it = v1.begin(); it != v1.end(); it++)//迭代器遍历
    {
        cout << *it << endl;
    }

    v1.erase(v1.begin() + 1);//删除
    v1.pop_back();//出栈


    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值