精华内容
下载资源
问答
  • string()
    千次阅读
    2021-12-05 12:29:14

    在 C# 中,可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。

    string 关键字是 System.String 类的别名。

    一、创建String对象

    可以使用以下方法之一来创建 string 对象:

    • 通过给 String 变量指定一个字符串
    • 通过使用 String 类构造函数
    • 通过使用字符串串联运算符( + )
    • 通过检索属性或调用一个返回字符串的方法
    • 通过格式化方法来转换一个值或对象为它的字符串表示形式
    using System;
    
    namespace StringApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
               //通过使用字符串串联运算符( + )
                string fname, lname;
                fname = "Rowan";
                lname = "Atkinson";
    
                string fullname = fname + lname;
                Console.WriteLine("Full Name: {0}", fullname);
    
                //通过使用 string 构造函数
                char[] letters = { 'H', 'e', 'l', 'l','o' };
                string greetings = new string(letters);
                Console.WriteLine("Greetings: {0}", greetings);
    
                //通过调用一个返回字符串的方法
                string[] sarray = { "Hello", "From", "Tutorials", "Point" };
                string message = String.Join(" ", sarray);
                Console.WriteLine("Message: {0}", message);
    
                //通过格式化方法来转换一个值或对象为它的字符串表示形式
                DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
                string chat = String.Format("Message sent at {0:t} on {0:D}",
                waiting);
                Console.WriteLine("Message: {0}", chat);
                Console.ReadKey() ;
            }
        }
    }

    二、String类的属性

    String 类有以下两个属性:

    序号属性名称 & 描述
    1Chars
    在当前 String 对象中获取 Char 对象的指定位置。
    2Length
    在当前的 String 对象中获取字符数。

    三、String类的方法

    String 类有许多方法用于 string 对象的操作。

    • Compare
    • Concat
    • Contains
    • Copy
    • CopyTo
    • EndsWith
    • Equals
    • Format
    • IndexOf
    • IndexOfAny
    • Insert
    • IsNullOrEmpty
    • Join
    • LastIndexOf
    • Remove
    • Replace
    • Split
    • StartsWith
    • ToCharArray
    • ToLower
    • ToUpper
    • Trim
    序号方法名称 & 描述
    1public static int Compare( string strA, string strB )
    比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
    2public static int Compare( string strA, string strB, bool ignoreCase )
    比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。
    3public static string Concat( string str0, string str1 )
    连接两个 string 对象。
    4public static string Concat( string str0, string str1, string str2 )
    连接三个 string 对象。
    5public static string Concat( string str0, string str1, string str2, string str3 )
    连接四个 string 对象。
    6public bool Contains( string value )
    返回一个表示指定 string 对象是否出现在字符串中的值。
    7public static string Copy( string str )
    创建一个与指定字符串具有相同值的新的 String 对象。
    8public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count )
    从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。
    9public bool EndsWith( string value )
    判断 string 对象的结尾是否匹配指定的字符串。
    10public bool Equals( string value )
    判断当前的 string 对象是否与指定的 string 对象具有相同的值。
    11public static bool Equals( string a, string b )
    判断两个指定的 string 对象是否具有相同的值。
    12public static string Format( string format, Object arg0 )
    把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。
    13public int IndexOf( char value )
    返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
    14public int IndexOf( string value )
    返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。
    15public int IndexOf( char value, int startIndex )
    返回指定 Unicode 字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
    16public int IndexOf( string value, int startIndex )
    返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
    17public int IndexOfAny( char[] anyOf )
    返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。
    18public int IndexOfAny( char[] anyOf, int startIndex )
    返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
    19public string Insert( int startIndex, string value )
    返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。
    20public static bool IsNullOrEmpty( string value )
    指示指定的字符串是否为 null 或者是否为一个空的字符串。
    21public static string Join( string separator, string[] value )
    连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
    22public static string Join( string separator, string[] value, int startIndex, int count )
    连接一个字符串数组中的指定位置开始的指定元素,使用指定的分隔符分隔每个元素。
    23public int LastIndexOf( char value )
    返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
    24public int LastIndexOf( string value )
    返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
    25public string Remove( int startIndex )
    移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
    26public string Remove( int startIndex, int count )
    从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。
    27public string Replace( char oldChar, char newChar )
    把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
    28public string Replace( string oldValue, string newValue )
    把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。
    29public string[] Split( params char[] separator )
    返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
    30public string[] Split( char[] separator, int count )
    返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。
    31public bool StartsWith( string value )
    判断字符串实例的开头是否匹配指定的字符串。
    32public char[] ToCharArray()
    返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。
    33public char[] ToCharArray( int startIndex, int length )
    返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。
    34public string ToLower()
    把字符串转换为小写并返回。
    35public string ToUpper()
    把字符串转换为大写并返回。
    36public string Trim()
    移除当前 String 对象中的所有前导空白字符和后置空白字符。
    //比较字符串 String.Compare(str1, str2)
    using System;
    
    namespace StringApplication
    {
       class StringProg
       {
          static void Main(string[] args)
          {
             string str1 = "This is test";
             string str2 = "This is text";
    
             if (String.Compare(str1, str2) == 0)
             {
                Console.WriteLine(str1 + " and " + str2 +  " are equal.");
             }
             else
             {
                Console.WriteLine(str1 + " and " + str2 + " are not equal.");
             }
             Console.ReadKey() ;
          }
       }
    }
    //字符串包含字符串 str.Contains("test")
    //返回一个表示指定 string 对象是否出现在字符串中的值。
    using System;
    
    namespace StringApplication
    {
       class StringProg
       {
          static void Main(string[] args)
          {
             string str = "This is test";
             if (str.Contains("test"))
             {
                Console.WriteLine("The sequence 'test' was found.");
             }
             Console.ReadKey() ;
          }
       }
    }
    //获取子字符串
    using System;
    
    namespace StringApplication
    {
            class StringProg
            {
                    static void Main(string[] args)
                    {
                            string str = "Last night I dreamt of San Pedro";
                            Console.WriteLine(str);
                            string substr = str.Substring(23);
                            Console.WriteLine(substr);
                            Console.ReadKey() ;
                    }
            }
    }
    //连接字符串
    using System;
    
    namespace StringApplication
    {
       class StringProg
       {
          static void Main(string[] args)
          {
             string[] starray = new string[]{"Down the way nights are dark",
             "And the sun shines daily on the mountain top",
             "I took a trip on a sailing ship",
             "And when I reached Jamaica",
             "I made a stop"};
    
             string str = String.Join("\n", starray);
             Console.WriteLine(str);
             Console.ReadKey() ;
          }
       }
    }

    更多相关内容
  • C++ string

    千次阅读 2021-04-15 21:29:56
    C++ stringstring 的初始化 ​ 使用 string 类要导入头文件 #include <string>,string 类是模板类 typedef basic_string<char> string; 从 basic_string 类模板实例化生成的。string 类有多种构造...

    string 的初始化

    ​ 使用 string 类要导入头文件 #include <string>,string 类是模板类 typedef basic_string<char> string;basic_string 类模板实例化生成的。string 类有多种构造函数,string 对象的几种初始化方式如下

    string s1("Hello");
    string month = "March";
    string s2(8,'x'); // 生成具有8个x字符的字符串
    // string 对象不能用字符(char)进行初始化,但是可以用字符对string 对象进行赋值
    string error1 = 'c';
    string error2('c');
    // string 对象不能用数值进行初始化
    string error1 = 22;
    string error2(8);
    

    string 的基础操作

    获取长度 length()

    ​ string 对象的长度用成员函数 length() 读取,string s("hello"); cout << s.length();

    流读取 getline()

    ​ string 类支持流读取运算符,string str; cin >> str;。同时支持 getline() 函数,从流读取中读取一整行到指定的 string 对象,getline(cin, str);

    赋值 =

    ​ string 类支持 = 运算符进行赋值,string s1("cat"), s2;

    复制 assign()

    ​ string 对象使用 assign() 成员函数进行复制,string s1("cat"), s3; s3.assign(s1);,使用 assign() 函数除了可以完整复制,也可以指定起始位置和子串长度进行部分复制s3.assign(s1,1,3); 从 s1 中下标为1的字符开始复制3个字符的子串给 s3。除此之外也可以对单个字符进行复制 s2[5] = s1[3] = 'a';

    随机访问 at()

    ​ string 对象可以使用 at() 成员函数逐个访问对象中的字符,也可以使用下标运算符 [] 进行随机访问,区别在于 at() 成员函数会做范围检查,如果超出范围会抛出 out_of_range 异常,而下标运算符不做范围检查。string str("Hello"); sout<< str.at(1) << str[2];

    连接 append()

    ​ string 对象的连接可以使用 append() 成员函数连接字符串,string s1("hello"), s2("world"); s1.append(s2);;和 assign() 函数类似 append() 函数也可以通过指定起始位置和长度进行部分连接s2.append(s1,3,s1.size()); 从 s1 中下标为3开始将s1.size() 个字符连接到 s2 字符串,如果字符串内没有足够字符,则复制到字符串最后一个字符。除了 append() 函数也可以使用连接运算符 + 连接字符串,s1 += s2;

    取子串 substr()

    ​ string 对象使用 substr() 成员函数取子串,string s1("hello"), s2; s2 = s1.substr(0,4); 返回 s1 从下标0开始的4个字符组成的子串给 s2。

    交换 swap()

    ​ string 对象使用 swap() 成员函数交换两个 string 对象的值,string s1("hello"), s2("world"); s1.swap(s2);

    替换 replace()

    ​ string 对象使用 replace() 成员函数替换字符串,string s1("hello"); s1.replace(2,3,"1234"); 将 s1 中从下标 2 开始的3个字符串用 “1234” 替换;也可以使用· s1.replace(2,3,"1234",1,2); 指定用于替换字符串的子串,即用 “1234” 下标 1 开始的两个字符进行替换。

    插入 insert()

    ​ string 对象使用 insert() 成员函数插入其他字符串,string s1("hello"), s2("world"); s1.insert(4,s2); 将 s2 插入到 s1 下标为4的位置;s1.insert(2,s2,0,3); 将 s2 从下标0开始的3个字符插入到 s1 下标为2的位置;

    删除子串 erase()

    ​ string 对象使用 erase() 成员函数删除子串,string s1("hello"); s1.erase(2); 将 s1 中从下标 2 开始(包含下标2的字符)之后的字符删除。

    string 的比较操作

    关系运算符比大小:string 对象可以关系运算符比较大小 ==, >, >=, <, <=, != 返回值都是 bool 类型,成立返回 true,否则返回 false

    string s1("hello"),s2("hello"),s3("hell");
    bool b = (s1 == s2);
    cout << b << endl;
    b = (s1 == s3);
    cout << b << endl;
    b = (s1 > s3);
    cout << b << endl;
    

    compare()函数比大小:string 对象也可以compare() 成员函数比较大小 ,大于返回值为 1,等于返回值为 0,小于返回值为 -1;和 assign(), append()函数类似,compare()函数也可以指定起始位置和长度进行部分比较s1.compare(1,2,s3,0,3); s1 从以开始的2个字符构成的子串和 s3 从0开始的3个字符构成的子串进行比较。

    string 的查找操作

    ​ 示例 string s1("hello, world");

    • find()s1.find("lo"); 在 s1 中从前向后查找 "lo" 第一次出现的地方,如果找到返回对应的位置即 l 的位置下标;如果没有找到则返回一个静态常量 string::npos 。除此之外,find() 成员函数也可以指定查找的起始位置,s1.find("ll",3);表示从 s1 下标为3的位置开始从前向后查找。

    • rfind()s1.rfind("lo"); 在 s1 中从后向前查找 "lo" 第一次出现的地方,如果找到返回对应的位置即 l 的位置下标;如果没有找到则返回一个静态常量 string::npos

    • find_first_of()s1.find_first_of("abcd"); 在 s1 中从前向后查找 "abdc"任何一个字符第一次出现的地方,如果找到返回被找到字母的位置;如果没有找到则返回一个静态常量 string::npos

    • find_last_not_of()s1.find_last_not_of("abcd"); 在 s1 中从后向前查找不在 "abdc"任何一个字符第一次出现的地方,如果找到返回被找到字母的位置;如果没有找到则返回一个静态常量 string::npos

    string 的C语言转换

    ​ C++ 是兼容 C 语言的,但是 C 语言中没有 string 类,所以要使用一些方法将 string 对象转换为 C 语言支持的 char * 字符串。

    • c_str():返回一个以 \0 结尾的 C 字符串,即 c_str() 函数返回一个指向正规 C 字符串的指针, 内容与原始string串相同。例如 string s1("hello world"); s1.c_str();s1.c_str(); 返回传统的 const char * 类型字符串,且该字符串以 \0 结尾。
    • data():与 c_str() 方法类似,但是返回的是 char * 类型字符串,而非 const 类型,在修改时会导致原始字符转被更改。

    String 类型转换

    C++11新特性中加入了更加便捷的字符串类型与其他数据类型的转换方法,使用前导入头文件 #include <string>

    其他类型转字符串

    string to_string(int _Val);
    string to_string(unsigned int _Val);
    string to_string(long _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);
    

    字符串转其他类型

    double stod(const string& _Str, size_t *_Idx = nullptr);
    float stof(const string& _Str, size_t *_Idx = nullptr);
    int stoi(const string& _Str, size_t *_Idx = nullptr, int _Base = 10);
    long stol(const string& _Str, size_t *_Idx = nullptr, int _Base = 10);
    long double stold(const string& _Str, size_t *_Idx = nullptr);
    unsigned long stoul(const string& _Str, size_t *_Idx = nullptr, int _Base = 10);
    long long stoll(const string& _Str, size_t *_Idx = nullptr, int _Base = 10);
    unsigned long long stoull(const string& _Str, size_t *_Idx = nullptr, int _Base = 10);
    

    字符串流处理

    ​ 除了标准流和文件流输入输出外,还可以从 string 进行输入输出。类似 istream 和 ostream 进行标准流输入输出,也可以用 istringstream 和 ostringstream 进行字符串上的输入输出,也称为内存输入输出。使用字符串流处理需要导入以下头文件 <string> <iostream> <sstream>

    // 使用 istringstream 进行字符串输入
    string input("Input test 123 4.7 A");
    istringstream inputString(input); // 声明istringstream对象
    int i; double d; char c;
    inputString >> str1 >> str2 >> i >> d >> c; // 使用istringstream对象进行字符串输入
    cout << str1 << str2 << endl;
    cout << i << ' ' << d << ' ' << c << endl;
    
    // 使用 ostringstream 进行字符串输出
    ostringstream outputString;
    int a = 10;
    outputString << "This" << a << "ok" << endl;
    cout << outputString.str(); // 取出ostringstream的字符串
    

    Ctype.h 中的字符分类判断方法

    C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。

    这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。

    如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。

    判断字符类型函数

    函数描述
    isdigit( )是数字,返回值为真,否则为0
    isalpha( )是字母,返回值为真,否则为0
    isalnum( )是数字/字母,返回值为真,否则为0
    islower( )是小写字母,返回值为真,否则为0
    isupper( )是大写字母,返回值为真,否则为0
    isspace( )是空白字符(\n ’ ’ \f \r \t \v),返回值为真,否则为0
    iscntrl( )是控制字符(\t \v \f \a \b \r \n),返回值为真,否则为0
    isprint( )是可打印字符(包含空格),返回值为真,否则为0
    isgraph( )是可打印字符(除了空格),返回值为真,否则为0

    字符转换函数

    函数描述
    tolower( )若为大写字母,则转为小写字母并返回,否则返回原值
    toupper( )若为小写字母,则转为大写字母并返回,否则返回原值

    Reference

    C++string类总结

    展开全文
  • C++中的String的常用函数用法总结

    万次阅读 多人点赞 2018-08-27 09:15:36
    string的构造函数的形式: string str:生成空字符串 string s(str):生成字符串为str的复制品 string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 ...

    一. string的构造函数的形式:


    string str:生成空字符串
    
    string s(str):生成字符串为str的复制品
    
    string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
    
    string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值
    
    string s(num ,c):生成num个c字符的字符串
    
    string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
    
    eg:
    
    
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("012345", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    void test1()
    {
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("0123456", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
        cout<<"str2:"<<str2<<endl;
        cout<<"str3:"<<str3<<endl;
        cout<<"str4:"<<str4<<endl;
        cout<<"str5:"<<str5<<endl;
        cout<<"str6:"<<str6<<endl;
    }
    
    int main()
    {
        test1();
        return 0;
    }

    这里写图片描述

    二. string的大小和容量::

    
    1. size()和length():返回string对象的字符个数,他们执行效果相同。
    
    2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常
    
    3. capacity():重新分配内存之前,string对象能包含的最大字符数
    
    
    void test2()
    {
        string s("1234567");
        cout << "size=" << s.size() << endl;
        cout << "length=" << s.length() << endl;
        cout << "max_size=" << s.max_size() << endl;
        cout << "capacity=" << s.capacity() << endl;
    
    }

    这里写图片描述

    三. string的字符串比较::

    1. C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。  
    在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,  
    比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)
    同时,string (“aaaa”) <string(aaaaa)。    
    
    2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。 
      他返回一个整数来表示比较结果,返回值意义如下:0:相等 1:大于 -1:小于 (A的ASCII码是65a的ASCII码是97)
    void test3()
    {
        // (A的ASCII码是65,a的ASCII码是97)
        // 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0
        string A("aBcd");
        string B("Abcd");
        string C("123456");
        string D("123dfg");
    
        // "aBcd" 和 "Abcd"比较------ a > A
        cout << "A.compare(B):" << A.compare(B)<< endl;                          // 结果:1
    
        // "cd" 和 "Abcd"比较------- c > A
        cout << "A.compare(2, 3, B):" <<A.compare(2, 3, B)<< endl;                // 结果:1
    
        // "cd" 和 "cd"比较 
        cout << "A.compare(2, 3, B, 2, 3):" << A.compare(2, 3, B, 2, 3) << endl;  // 结果:0
    
    
        // 由结果看出来:0表示下标,3表示长度
        // "123" 和 "123"比较 
        cout << "C.compare(0, 3, D, 0, 3)" <<C.compare(0, 3, D, 0, 3) << endl;    // 结果:0
    
    }

    这里写图片描述

    四. string的插入:push_back() 和 insert()


    void  test4()
    {
        string s1;
    
        // 尾插一个字符
        s1.push_back('a');
        s1.push_back('b');
        s1.push_back('c');
        cout<<"s1:"<<s1<<endl; // s1:abc
    
        // insert(pos,char):在制定的位置pos前插入字符char
        s1.insert(s1.begin(),'1');
        cout<<"s1:"<<s1<<endl; // s1:1abc
    }

    这里写图片描述

    五、string拼接字符串:append() & + 操作符


    void test5()
    {
        // 方法一:append()
        string s1("abc");
        s1.append("def");
        cout<<"s1:"<<s1<<endl; // s1:abcdef
    
        // 方法二:+ 操作符
        string s2 = "abc";
        /*s2 += "def";*/
        string s3 = "def";
        s2 += s3.c_str();
        cout<<"s2:"<<s2<<endl; // s2:abcdef
    }

    这里写图片描述

    六、 string的遍历:借助迭代器 或者 下标法


    void test6()
    {
        string s1("abcdef"); // 调用一次构造函数
    
        // 方法一: 下标法
    
        for( int i = 0; i < s1.size() ; i++ )
        {
            cout<<s1[i];
        }
        cout<<endl;
    
        // 方法二:正向迭代器
    
        string::iterator iter = s1.begin();
        for( ; iter < s1.end() ; iter++)
        {
            cout<<*iter;
        }
        cout<<endl;
    
        // 方法三:反向迭代器
        string::reverse_iterator riter = s1.rbegin();
        for( ; riter < s1.rend() ; riter++)
        {
            cout<<*riter;
        }
        cout<<endl;
    }

    这里写图片描述

    七、 string的删除:erase()

    1. iterator erase(iterator p);//删除字符串中p所指的字符
    
    2. iterator erase(iterator first, iterator last);//删除字符串中迭代器
    
    区间[first,last)上所有字符
    
    3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引
    
    位置pos开始的len个字符
    
    4. void clear();//删除字符串中所有字符
    void test6()
    {
        string s1 = "123456789";
    
    
        // s1.erase(s1.begin()+1);              // 结果:13456789
        // s1.erase(s1.begin()+1,s1.end()-2);   // 结果:189
        s1.erase(1,6);                       // 结果:189
        string::iterator iter = s1.begin();
        while( iter != s1.end() )
        {
            cout<<*iter;
            *iter++;
        }
        cout<<endl;
    
    }

    八、 string的字符替换:


    1. string& replace(size_t pos, size_t n, const char *s);//将当前字符串
    
    从pos索引开始的n个字符,替换成字符串s
    
    2. string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c
    
    3. string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s
    void test7()
    {
        string s1("hello,world!");
    
        cout<<s1.size()<<endl;                     // 结果:12
        s1.replace(s1.size()-1,1,1,'.');           // 结果:hello,world.
    
        // 这里的6表示下标  5表示长度
        s1.replace(6,5,"girl");                    // 结果:hello,girl.
        // s1.begin(),s1.begin()+5 是左闭右开区间
        s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
        cout<<s1<<endl;
    }

    九、 string的大小写转换:tolower()和toupper()函数 或者 STL中的transform算法


    方法一:使用C语言之前的方法,使用函数,进行转换

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
    
        for( int i = 0; i < s.size(); i++ )
        {
            s[i] = tolower(s[i]);
        }
    
        cout<<s<<endl;
        return 0;
    }

    方法二:通过STL的transform算法配合的toupper和tolower来实现该功能

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
        string result;
    
        transform(s.begin(),s.end(),s.begin(),::tolower);
        cout<<s<<endl;
        return 0;
    }

    相关的我的另外一篇博客:
    C++对string进行大小写转换
    https://blog.csdn.net/qq_37941471/article/details/81988702

    十、 string的查找:find


    1. size_t find (constchar* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    2. size_t find (charc, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,
    
        -1表示查找不到字符
    
    3. size_t rfind (constchar* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    4. size_t rfind (charc, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符
    
    5. size_tfind_first_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    6. size_tfind_first_not_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    7. size_t find_last_of(const char* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    8. size_tfind_last_not_of (const char* s, size_t pos = npos) const;
    
     //在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串
    void test8()
    {
        string s("dog bird chicken bird cat");
    
        //字符串查找-----找到后返回首字母在字符串中的下标
    
        // 1. 查找一个字符串
        cout << s.find("chicken") << endl;        // 结果是:9
    
        // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
        cout << s.find('i',6) << endl;            // 结果是:11
    
        // 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
        cout << s.rfind("chicken") << endl;       // 结果是:9
    
        // 4. 从字符串的末尾开始查找字符
        cout << s.rfind('i') << endl;             // 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符
    
        // 5. 在该字符串中查找第一个属于字符串s的字符
        cout << s.find_first_of("13br98") << endl;  // 结果是:4---b
    
        // 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog,然后bird匹配不到,所以打印4
        cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4
        cout << s.find_first_not_of("dog bird 2006") << endl;  // 结果是:9
    
        // 7. 在该字符串最后中查找第一个属于字符串s的字符
        cout << s.find_last_of("13r98") << endl;               // 结果是:19
    
        // 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c,然后空格匹配不到,所以打印21
        cout << s.find_last_not_of("teac") << endl;            // 结果是:21
    
    }

    十一、 string的排序:sort(s.begin(),s.end())


    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    
    void test9()
    {
        string s = "cdefba";
        sort(s.begin(),s.end());
        cout<<"s:"<<s<<endl;     // 结果:abcdef
    }

    十二、 string的分割/截取字符串:strtok() & substr()


    strtok():分割字符串

    void test10()
    {
        char str[] = "I,am,a,student; hello world!";
    
        const char *split = ",; !";
        char *p2 = strtok(str,split);
        while( p2 != NULL )
        {
            cout<<p2<<endl;
            p2 = strtok(NULL,split);
        }
    }

    这里写图片描述

    void test11()
    {
        string s1("0123456789");
        string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度
        cout<<s2<<endl;
    }
    展开全文
  • c++ string字符串详解

    千次阅读 2022-03-24 17:09:57
    string字符串 ;string的创建和初始化 ; string的读写 ;string的基本操作; string的比较大小 ; string的连接。

    string字符串

    string本质上可以看做是一种vector< char >,也就是元素为char的vector。所以有关 vector的基本操作都可以在string上进行。


    string的创建和初始化

    string与 vector 类似,也有好几种初始化方法。(通过例子了解一下)

    string的初始化

    #include<iostream>
    #include<string>
    using namespace std;
    
    //string的初始化
    
    int main()
    {
    	string s1;
    	string s2 (3,'a');
    	string s3 ("value");
    	string s4 (s3);
    	cout << "s1:" << s1 << endl;
    	cout << "s2: " << s2 << endl;
    	cout << "s3: " << s3 << endl;
    	cout << "s4: " << s4 << endl;
    	return 0 ;
    }
    
    

    运行结果:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/826542e6cb6e405582aec63ab4b94c7d
    例子展示了几种不同的string初始化方法。由于字符串支持输出操作符“<<”,因此可以直接打印。

    第一种和最后一种初始化方法都与 vector类似,分别是空字符串和利用复制初始化字符串,第二种方法也与 vector< char >类似,而第三种方法则是用字符串字面量来初始化string字符串。需要注意的是,在使用字符串的时候我们需要包含标准库的< string >头文件。


    string的读写

    利用cout可以打印string,即将string输出到标准输出端,也就是命令行窗口。类似的,c++也提供了一种方法从标准输入端,也就是键盘将数据写入string。

    string的读写

    #include<iostream>
    #include<string>
    using namespace std;
    
    //string的读写
    
    int main()
    {
    	string s1;
    	string s2;
    	cout << "请输入用两个空格隔开的字符串!" << endl;
    	cin >> s1 >> s2;
    	cout << "s1: " << s1 << endl;
    	cout << "s2: " << s2 << endl;
    	return 0 ;
    }
    
    
    

    运行结果:
    在这里插入图片描述
    实际操作工程中,用户往往不知道程序期望自己输入几个字符串,这时候我们可以利用输入操作符“>>”的特性接受不确定个数的输入。

    string的循环读取

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    //string的循环读取
    
    int main()
    {
    	vector<string> strVec;
    	string s;
    	while (cin >> s)
    	{
    		strVec.push_back(s);
    		for ( int i = 0; i < strVec.size() ;i++ )
    	{
    		cout << strVec[i] << " " ;
    	}
    		cout << endl;
    	}
    	return 0;
    }
    
    

    运行结果:
    在这里插入图片描述
    从例子中可以看到,输入操作cin >> s 的表达式返回值可以反映出当前是否还有输入。由于标准输入是键盘输入,没有结尾的标志,因此这个循环会一直继续下去。如果是文件输入,到了文件尾没有字符串了就会跳出循环。
    例子中,在运行时依次输入了6个字符串,程序每次会反馈并输出当前媳妇穿vector中所有字符串。


    string的基本操作

    vector的操作都适用于string,接下来简单介绍一下这些基本操作。

    string的基本操作

    #include<iostream>
    #include<string>
    using namespace std;
    
    //string的基本操作
    
    int main()
    {
    	string s;
    	if (s.empty() ) cout << "字符串是空的" <<endl;
    	cout << "添加两个字符" <<endl;
    	s.push_back('a');
    	s.push_back('b');
    	if (s.empty() ) cout << "字符串是空的" <<endl;
    	cout << "字符串有:" << s.length() << "个字符" << endl;
    	cout << "打印字符串: " << s <<endl;
    	cout << "移除一个字符!" << endl;
    	s.pop_back();
    	if (s.empty() ) cout <<"字符串是空的!" << endl;
    	cout << "字符串有:" << s.length() << "个字符" << endl;
    	cout << "打印字符串: " << s << endl;
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    注意: string的size()也可以用length()来代替,一般情况下使用length()只是为了更好的表明这是一个字符串而已。
    此外,string也可以像vector那样使用方括号([])获取某个位置的字符。

    获取string中的字符

    #include<iostream>
    #include<string>
    using namespace std;
    
    //获取string中的字符
    
    int main ()
    {
    	string s = "hello world!" ;
    	for (int i = 0; i < s.length() ; i++)
    	{
    		if (i % 2)
    		{
    			cout <<s[i];
    		}
    	}
    	cout << endl;
    	return 0 ;
    }
    
    

    运行结果:
    在这里插入图片描述
    例子展示了使用下标操作符“[]”获取字符串的应用。


    string的比较

    string支持关系操作符,string的相等和不等判断有些类似与vector,都需要判断所有字符是否相等,只要有一个字符不等或者某一个字符串多一个字符,那么string就不相等。
    string的大于、小于判断会对每个对应的字符分别作比较,出现不匹配的情况立刻返回结果。其中,字符的比较使用了字典的顺序,也就是依次比较字符串中每个字符ASCLL码值大小,一样的话则继续比较下一个。

    string的比较

    #include<iostream>
    #include<string>
    using namespace std;
    
    //string的比较
    
    int main()
    {
    	string s1 = "";
    	string s2 = "";
    	for (int i = 0; i < 3; i++)
    	{
    		cout << "请输入两个用空格隔开的字符串:" << endl;
    		cin >> s1 >> s2;
    		if ( s1 < s2 )
    		{
    			cout << "字符串" << s1 << "小于" << s2 <<endl;
    		}
    		else if ( s1 > s2 )
    		{
    			cout << "字符串" << s1 << "大于" << s2 <<endl;
    		}
    		else
    		{
    			cout << "字符串" << s1 << "等于" << s2 <<endl;
    		}
    	}
    	return 0 ;
    }
    
    

    运行结果:
    在这里插入图片描述
    例子中使用了将字符串字面量赋值给string的方法来初始化空字符串。

    这个小程序支持输入,可以输入两个任意的字符串来加深对字符串比较规则的理解。例子中输入了3对字符串,分别展示了字符串比较的3个规则:

    <1>字符串比较区分大小写,而大写字母比小写字母小(符合ASCLL码的顺序)。
    <2>字符串不等长,但是在短的字符串与长的字符串的前一部分完全相等的情况下,短的string小于长的string。
    <3>遇到第一对不匹配的字符就立刻返回按字典顺序比较的结果。

    在这里 c 和 csharp 的开头都是 c ,因此长的csharp更大。csharp 和 cplusplus 的第一个字符都是 c ,就继续看第二个字符,由于 s 比 p 大,因此csharp 大于 cplusplus.


    string的连接

    string的连接是通过加法操作符实现的,加号两边可以随意组合string或是字符串字面量。

    string的连接

    #include <iostream>
    #include<string>
    using namespace std;
    
    //string的连接
    
    int main()
    {
    	string s1 = "";
    	string s2 = "";
    	cout << "请输入两个用空格间隔的字符串:" << endl;
    	cin >> s1 >> s2 ;
    	string s3 = s1 + s2 ;
    	cout << "字符串连接的结果为:" << s3 << endl;
    	for (int i = 0;i < 3;i++)
    	{
    		string s4 = "";
    		cout << "请输入字符串:" << endl;
    		cin >> s4;
    		s3 +=s4;
    		cout << "字符连接的结果是: " << s3 << endl;
    	}
    	return 0;
    }
    
    

    运行结果:
    在这里插入图片描述
    例子展示了字符串的连接,除了加法操作符外,还可以用加法赋值符连接字符串。

    如果本文对你有帮助,请点赞支持一下~

    展开全文
  • public static void main(String[] args) { String str = "group-banner-top-http://pic/test/20220225092606e0dc59c3ef8c915b8fbe9f99153b7ef9"; //获取第一个"-"后面的所有字符串 int index = str.indexOf("-...
  • java-将Map 转换为Map 如何将Map转换为Map?这不起作用:Map map = new ...11个解决方案37 votes现在我们有了Java 8 / streams,我们可以在列表中添加一个可能的答案:假设每个值实际上都是String对象,则强制转换为...
  • java String类(超详细!)

    万次阅读 多人点赞 2021-04-30 20:00:51
    1、String表示字符串类型,属于 引用数据类型,不属于基本数据类型。 2、在java中随便使用 双引号括起来 的都是String对象。 例如:“abc”,“def”,“hello world!”,这是3个String对象。 3、java中规定,双...
  • Java数据类型—String基础

    万次阅读 2020-12-17 14:25:26
    1. Java 语言针对字符串的拼接和将其他对象转化成字符串提供了特殊的支持 2. Java为了优化字符串的性能,提供了字符串常量池 3. String 不可变的原因是底层存储的字节数组是final 修饰的和String 类是被final 修饰的
  • Java基础系列24-常用api之String

    万次阅读 2021-08-24 14:35:14
    文章目录一.String类概述二.String类案例2.1 String类4种常用构造方法2.2 String类创建对象两种方式2.3 String类练习之模拟用户登录2.4 String类遍历字符串2.5 String类字符串拼接2.6 String类字符串反转参考: ...
  • C++中的string类用法简介

    万次阅读 多人点赞 2019-08-21 17:21:17
    本文主要介绍C++中的string类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库...
  • stringstringstream用法

    万次阅读 多人点赞 2017-09-23 10:04:03
    stringstringstream用法总结
  • 调用 string 构造方法 创建 string 对象 ; ① 传入 string 参数 : string 构造方法可以传入 string 对象 ; ② 传入 C 字符串参数 : string 构造方法也可以传入 一个 C 字符串 ; //② 调用构造方法...
  • 深入理解Java String

    万次阅读 多人点赞 2018-06-28 21:15:55
    在Java语言了中,所有类似“ABC”的字面值,都是String类的实例;String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及...
  • String用法详解

    万次阅读 多人点赞 2018-04-05 16:15:51
    string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心...
  • 如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = "This+is+a+test"; 我们如何将以上字符串按照某种分隔符( ,-,+),将其分割成四个子串,其值分别为 “This” “is” “a” ...
  • String类详解

    万次阅读 多人点赞 2019-04-03 22:33:18
     String(String Original),把字符串封装成字符串对象;  举例:String s1 = new String(“hello”);  String(char[] value),把字符数组的数据封装成字符串对象;  举例:char[] chs = {‘h’,‘e’,‘l’,‘l’...
  • Java String 对象,你真的了解了吗?

    万次阅读 多人点赞 2019-09-24 10:12:43
    String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一下String对象的优化过程。 1. 在 Java6 以及之前的版本中 ...
  • C++string类常用方法

    万次阅读 多人点赞 2020-10-09 15:34:26
    C++string类常用方法 1、string(const char *s) :将 string 对象初始化为 s 指向的字符串 string str("hello"); 2、string(size_type n,char c) :创建一个包含 n 个元素的 string 对象,其中每个元素都被初始化为...
  • c++ string头文件详解

    万次阅读 多人点赞 2018-11-15 12:44:02
    标准c++中string类函数介绍 注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数...
  • Java中String 字符串与List<String>互转
  • Tcl字符串命令string

    千次阅读 2019-05-30 17:25:08
    string
  • C++ char类型转string类型的两种方法

    千次阅读 2022-04-18 11:54:35
    string类选用字节(char)作为它的字符类型,那么string其实就是一个char数组。 通过string类的构造函数进行转换 通过void push_back (char c);进行转换 哞加密(USACO 2015 US Open Bronze)
  • String、StringBuffer和StringBuilder的区别

    万次阅读 多人点赞 2019-06-16 10:31:19
    String、StringBuffer和StringBuilder的区别: 文章目录StringStringBufferStringBuilderStringBuffer是如何实现线程安全的呢?Java9的改进 String   String类是不可变类,即一旦一个String对象被创建以后,包含在...
  • Java StringString[] 相互转换

    千次阅读 2021-12-31 09:38:24
    一、StringString[ ] //1.使用split() String[] strs = str.split(","); //2.创建一个String[] 数组,再给这个数组赋值 private String[] strArray(String customerId){ String[] customerIds = new String[1]...
  • String str =“a” + “b” 与 Strin str = new String(“c”) + new String(“d”) 把对象创建在了哪里?创建了几个字符串对象? 话不多出,show my code: String str =“a” + “b” package com.bestqi...
  • String类的常见问题

    万次阅读 2021-03-17 22:29:24
    String类的常见面试题 1.判定定义为String类型的两个对象是否相等(1) public class StringDemo01 { public static void main(String[] args) { String string01 = "zrt"; String string02 = "zrt"; System.out...
  • Java long 转成 String的实现

    万次阅读 2021-03-08 17:28:55
    Java long 转成 String的实现第一种:String s = String.valueOf(long)第二种:String s = Long.toString(long)补充知识:解决:Java 把Long转换成日期再转换成String类型1、把long类型数值转成日期类型2、使用...
  • C++中string如何实现字符串分割函数split()

    万次阅读 多人点赞 2020-12-17 15:25:32
    string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = "This+is+a+test"; 我们如何将以上字符串按照某种分隔符(,-,+),将其分割成四个子串,其值分别为 “This” “is” “a” ...
  • 深入理解String、StringBuffer和StringBuilder

    万次阅读 多人点赞 2020-07-12 11:12:53
    本文主要针对面试中经常被问到的String的热点、难点进行深入分析,祝你备战秋招,直通BAT
  • java 中private static final String string的介绍final的意思:final的意思是这个string类型的东西不能再被改变。也可以说是常量static说明这个string在类被加载的时就加载了初始化了了。public class Test0{...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,174,555
精华内容 5,669,822
关键字:

string()