C++(五)String 字符串类

简介: 本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。

string 是 C++中处理字符串的类,是对 c 语言中字符串的数据和行为的包装。使
对字符串的处理,更简单易用。

1. 定义和初始化


int main(){

    string *ps= new string("hello");
    cout<<ps<<endl; //0xf55e40
    cout<<*ps<<endl; //hello


    //初始化字符串
    string s1="world";
    string s2("next");

    cout<<sizeof(string )<<endl; //32
    cout<<sizeof(s1)<<endl; //32
    cout<<sizeof(s2)<<endl; //32
    cout<<s1<<endl; //world
    cout<<s2<<endl; //next

    //字符串再次赋值
    s1=s2;
    cout<<s1<<endl; //next

    //cin输入字符串
    //字符串会获取输入第一个空格之前的的数据
    //cin>>s1;
    //cout<<s1<<endl; //输入的数据


    //使用getline函数获取输入的所有数据,包括空格
    getline(cin,s1);
    cout<<s1<<endl; //输入的数据
}

2. 字符串比较

string 重载了运算符+ < > = != += 使字符串的操作变的非常简单。其运
算方式类似于普通数值运算,这是运算符重载的好处。


int main() {
    string s="hello world";
    string x="hello world";
    string y="helloworld!";



    cout<<s.size()<<endl; //获取字符串长度  11
    cout<<s.length()<<endl; //获取字符串长度  11
    cout<<s.empty()<<endl; //判断字符串是否为空  0


    //查找字符串
    cout<<s.find("l")<<endl; //查找字符串中第一个出现的位置  2
    cout<<s.find("l",3)<<endl; //查找字符串中从位置3开始出现的第一个位置  3


    //比较字符串
    cout<<s.compare(x)<<endl; //比较两个字符串是否相等  0
    cout<<s.compare(y)<<endl; //比较两个字符串是否相等  -1
    if(s==x){
        cout<<"s==x"<<endl;
    }
    if(s==y){
        cout<<"s==y"<<endl;
    } else{
        cout<<"s!=y"<<endl;
    }

    //截取字符串
    cout<<s.substr(3)<<endl; //获取从位置3开始到结尾的字符串  lo world
    cout<<s.substr(3,5)<<endl; //获取从位置3开始的5个字符  lo wor



    //拼接
    string z=s+x;
    cout<<z<<endl; //hello worldhello world

    y+=s;
    cout<<y<<endl; //helloworld!hello world

    //替换
    string a="hello world";
    string b=a.replace(3,5,"good");
    cout<<a<<endl; //hello world
    cout<<b<<endl; //hegoodd world
}

数值与字符串互转函数

value to string

string to_string(int val);
string to_string(unsigned val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
    int inta = 1234;
    string str = to_string(inta);
    cout<<str<<endl; //1234
    str += "5678";
    cout<<str<<endl; //12345678

string to value

int stoi(const string& str, size_t* idx = 0, int base = 10);
long stol(const string& str, size_t* idx = 0, int base = 10);
long long stoll(const string& str, size_t* idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t* idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t* idx = 0, int base = 10);
float stof(const string& str, size_t* idx = 0);
double stod(const string& str, size_t* idx = 0);
long double stold(const string& str, size_t* idx = 0);

函数参数:

  • str: 要转换的字符串。
  • idx: 指向当前解析位置的指针。
  • base: 进制。

返回值:

  • 转换后的数值。

    string str = "12345678";
    int inta = stoi(str);
    cout<<inta<<endl; //12345678

    string str = "1111a";
    int a  = stoi(str);
    a++;
    cout<<a<<endl;//1112

    string strbin = "-10010110001";
    string strhex= "0x7f";
    int bin = stoi(strbin,nullptr,2);
    int hex = stoi(strhex,nullptr,16);
    cout<<"bin:"<<bin<<endl;
    cout<<"hex:"<<hex<<endl;

string 数组


    string strArray[10] = {
            "0",
            "1",
            "22",
            "333",
            "4444",
            "55555",
            "666666",
            "7777777",
            "88888888",
            "999999999",
    };
    for(int i=0; i<10; i++)
    {
        cout<<strArray[i]<<endl;
    }
相关文章
|
3天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
10 1
Java——String类详解
|
14天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
14天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
|
14天前
|
存储 设计模式 编译器
C++(十三) 类的扩展
本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。
|
18天前
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
36 0
|
18天前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
31 0
|
21天前
|
缓存 安全 Java
Java String类
Java String类
13 0
|
3月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
1月前
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
28天前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别