1.1 C++ STL 字符串构造函数

String 字符串操作容器是C++标准中实现的重要容器,其主要用于对字符串的高效处理,它和C风格中的string.h并不是同一个库,两个库有极大的差距,C库中的string.h主要面向过程提供一些处理函数,而C++库中的string则是基于类实现的更高效的一种字符串处理方法集,类中提供了非常方便的成员函数供我们使用.

1.1 字符串构造函数

如下一段C++代码,展示了如何使用STL字符串的不同构造函数对字符串进行赋值和初始化。

在代码中,首先定义了字符串变量str,并将其初始化为"hello lyshark"。然后,使用构造函数将字符串str中的内容全部复制到新的字符串变量str_1中。接着,使用构造函数从字符串str的第2个元素开始,复制5个元素,并赋值给新的字符串变量str_2

使用构造函数复制字符串str中的所有元素,并赋值给新的字符串变量str_3。接下来,将字符数组ch中的前3个元素赋值给新的字符串变量str_4。最后,使用构造函数将5个字符x组成的字符串xxxxx赋值给新的字符串变量str_5

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str("hello lyshark"); // 定义一个字符串
  string str_1(str);           // 构造函数,将 str中的内容全部复制到str_1
  
  string str_2(str, 2, 5);     // 构造函数,从字符串str的第2个元素开始,复制5个元素,赋值给str_2
  
  string str_3(str.begin(), str.end()); // 复制字符串 str 的所有元素,并赋值给 str_3

  char ch[] = "lyshark";
  string str_4(ch, 3);    // 将字符串ch的前5个元素赋值给str_4

  string str_5(5, 'x');   // 将 5 个 'X' 组成的字符串 "XXXXX" 赋值给 str_5
  
  system("pause");
  return 0;
}

1.2 字符串对象赋值

如下C++代码,展示了如何使用STL字符串中的assign()函数对字符串进行赋值和操作。

在代码中,首先定义了字符串变量strnew_str,并将其初始化为"lyshark"。然后,使用基本的对象赋值将字符串str的内容赋值给new_str,即new_str = str

接着,定义了三个新的字符串变量s1、s2s3,并使用assign()函数对其进行初始化。使用assign()函数的第一个形式,将字符串str从第1位开始向后截取4个字符,并赋值给字符串s1。使用assign()函数的第二个形式,将5个字符A填充到字符串s2中。使用assign()函数的第三个形式,未指定任何参数,因此字符串s3被初始化为空字符串。

最后,使用cout输出字符串s3的内容。由于字符串s3的内容为空,因此输出结果为空行。

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str,new_str;

  str = "lyshark";     // 基本的对象赋值
  new_str.assign(str); // 把str中的数据赋值给new_str

  string s1, s2, s3;

  s1.assign(str, 1, 4);     // 字符串截取从str中第1位开始向后截取4个字符
  s2.assign(5, 'A');        // 想字符串中填充5个A

  cout << s3 << endl;
  
  system("pause");
  return 0;
}

1.3 字符串遍历操作

如下C++代码,展示了如何使用STL字符串中的[]运算符和at()函数遍历字符串,并介绍了在遍历时如何避免越界访问字符串。

在代码中,首先定义了字符串变量str,并将其初始化为"hello lyshark"

使用[]运算符遍历字符串str中的所有字符,并输出每个字符。需要注意的是,使用[]运算符访问字符串时不能保证索引的有效性,如果访问越界,程序会直接崩溃。

使用at()函数遍历字符串str中的所有字符,并输出每个字符。使用at()函数访问字符串时,如果索引越界,则会抛出out_of_range异常。为了避免程序崩溃,使用try…catch语句来捕获异常并进行处理。

#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;

int main(int argc, char* argv[])
{
  string str = "hello lyshark";

  // 第一种遍历如果字符串越界,会直接挂掉
  for (int x = 0; x < str.size(); x++)
    cout << str[x] << endl;

  // 第二种at遍历,如果越界会抛出异常
  try
  {
    for (int x = 0; x < str.size(); x++)
      cout << str[x] << endl;
  }
  catch (out_of_range &e)
  {
    cout << "异常类型: " << e.what() << endl;
  }
  system("pause");
  return 0;
}

1.4 字符串添加与删除

如下C++代码,展示了如何使用STL字符串中的append()substr()erase()insert()等函数对字符串进行处理。

在代码中,首先定义了字符串变量str1str2,并将其初始化为hellolyshark,然后使用append()函数将字符串str2的内容追加到字符串str1的末尾,并输出追加后的结果。

使用append()函数将字符串str2的第1个字符到第3个字符之间的内容追加到字符串str1的末尾,并输出追加后的结果。

定义新的字符串变量str3,并将其初始化为"this is ok",然后使用substr()函数取子串,并将截取出来的子串赋值给变量str4和str5。

定义新的字符串变量str6,并将其初始化为"real steel",然后使用erase()函数从第5个字符开始向后删除所有字符,并输出删除后的结果。然后,使用erase()函数从第0个字符开始向后删除4个字符,并输出删除后的结果。

定义新的字符串变量str7,并将其初始化为"hello lyshark",然后使用insert()函数在下标2处插入字符串"123",并使用insert()函数在下标3处插入4个字符A,并输出插入后的结果。

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str1("hello "), str2("lyshark");
  str1.append(str2);        // 将str2的内容追加到str1后面
  str1.append(str2, 1, 3);  // 将str2内容从第1个到第3个字符追加到str1后面
  str1.append(5, 'A');      // 向str1子串里面追加5个A

  string str3 = "this is ok";
  string str4 = str3.substr(1,3);  // 截取子串 => his
  string str5 = str3.substr(1, 5); // 截取子串 => his i

  string str6 = "real steel";
  str6.erase(5);               // 从第5个字符开始向后删除所有
  str6.erase(0, 4);            // 从第0个字符开始向后删除4个

  string str7 = "hello lyshark";
  str7.insert(2, "123");     // 在下标 2 处插入字符串"123"
  str7.insert(3, 4, 'A');    // 在下标 3 处插入 5 个 'A'
  
  system("pause");
  return 0;
}

1.5 字符串查找与替换

如下C++代码,展示了如何使用STL字符串中的find()substr()find_first_of()compare()replace()等函数对字符串进行处理。

使用find()函数在字符串str1中查找字符u第一次出现的位置,并将其赋值给变量x,如果查找到了,则使用substr()函数输出从字符u位置到字符串结尾处的子串。

使用find()函数在字符串str1中查找字符串"Source",并从下标3的位置开始查找,在找到的位置处使用substr()函数输出从该位置开始到字符串结尾处的子串。

使用find_first_of()函数在字符串str1中查找字符串"urc"中的第一个出现的字符,并将其位置输出。

使用compare()函数比较两个字符串变量str1str2是否相等,如果不相等,则输出False。

最后,定义了一个新的字符串变量str3,并将其初始化为"hello lyshark",然后使用replace()函数从第1个位置开始替换3个字符并将其替换成"abcde"

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str1("Source Code"),str2("Source Code");
  int x;

  if ((x = str1.find("u")) != string::npos)
    cout << str1.substr(x) << endl;    // 查找字符u第一次出现的位置

  if ((x = str1.find("Source", 3)) != string::npos)
    cout << str1.substr(x) << endl;    // 查找Source字符串,并从下标3位置输出
  
  if ((x = str1.find_first_of("urc")) != string::npos)
    cout << x << endl;                // 查找urc字符串最先出现的位置

  if (str1.compare(str2))               // 比较两个字符串是否相等
    cout << "False" << endl;

  string str3 = "hello lyshark";
  str3.replace(1, 3, "abcde");          // 从第1处开始替换3个字符
  cout << str3 << endl;
  
  system("pause");
  return 0;
}

1.6 字符串首尾数据提取

如下C++代码,展示了如何使用STL字符串string类型中的substr()函数和find()函数将字符串分解为多个子串,并输出提取后的结果。

使用find()函数查找字符@在字符串email中的位置,并将其赋值给变量pos

使用substr()函数提取从字符串email的第0个字符开始到pos位置之前的子串,并将其赋值给变量username,并输出该变量的值。

使用substr()函数提取从字符串emailpos+1位置开始到结束的子串,并将其赋值给变量mail,并输出该变量的值。

读者需要注意,在使用substr()函数提取子串时,第一个参数表示子串的起始位置,第二个参数表示子串的长度。如果第二个参数不写,则默认提取从起始位置开始到字符串结尾处的字符。

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string email = "admin@lyshark.cn";
  int pos = email.find("@");

  string username = email.substr(0, pos); // 提取出用户名
  cout << username << endl;

  string mail = email.substr(pos+1);      // 提取出mail邮箱
  cout << mail << endl;

  system("pause");
  return 0;
}

1.7 字符串与字符互转

如下C++代码,展示了如何使用STL字符串string类型和标准库函数实现了不同类型之间的相互转换,包括string转换为char类型,char转换为string类型,以及int转换为string类型。

使用c_str()函数将string类型的变量转换为const char*类型,并将其存储到指针变量ptr中,用于输出其值。

使用指针变量ptr创建一个新的string类型的变量str1,并将转换后的字符串赋值给它,用于输出其值。

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str = "lyshark";

  // string 转换为 -> char *
  const char *ptr = str.c_str();
  cout << ptr << endl;

  // char * 转换为 -> string
  string str1(ptr);
  cout << str1 << endl;

  // int 转换为 -> string
  int Num = 546;
  string str2 = to_string(Num);
  cout << str2 << endl;
  
  system("pause");
  return 0;
}

1.8 字符串大小写互转

如下C++代码,展示了如何使用标准库函数toupper()将字符串中的字母全部转换为大写形式,并输出转换后的结果。

使用toupper()函数将每个字符转换成大写形式,并将转换后的字符再存储回原始的字符串变量str中。

最后,输出字符串中所有的字母字符均已转换成大写形式的结果。

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
  string str = "lyshark";
  for (int x = 0; x < str.size(); x++)
    str[x] = toupper(str[x]);   // 全部变大写
    //str[x] = tolower(str[x]); // 全部变小写
    cout << str << endl;
  
  system("pause");
  return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在网络编程中,C++STL(Standard Template Library)是一个非常有用的工具。STL提供了许多数据结构和算法,可以帮助我们更轻松地处理网络编程中的各种任务。 首先,STL的容器类是网络编程中经常用到的数据结构。例如,我们可以使用STL的vector来存储动态大小的数组,非常适用于存储和处理网络数据。此外,STL的map和unordered_map类可以用于构建键值对结构,方便快速地查找和操作网络数据。 STL还提供了一系列的算法,可以用于处理网络编程中的常见任务。例如,我们可以使用STL的sort算法对网络数据进行排序,使用STL的find算法查找某个特定的数据,或者使用STL的accumulate算法计算网络数据的总和。这些算法能够在网络编程中提高代码的效率和可读性。 此外,STL还提供了一些其他功能,如字符串处理和输入输出操作等,这些功能在网络编程中也非常有用。 总之,C++STL在网络编程中是一个强大且方便的工具。它提供了多种数据结构和算法,可以帮助我们更轻松地处理网络数据,并提高代码的效率和可读性。无论是处理数据、查找特定的值还是进行计算,STL都能够提供相应的功能,使网络编程变得更加简单和高效。 ### 回答2: C++ STL(标准模板库)是C++语言的一个重要部分,它提供了一系列的模板类和函数,用于实现常用的数据结构和算法。网络编程是指利用计算机网络进行数据传输和通信的一种编程方式。 在C++中使用STL进行网络编程时,可以使用STL提供的一些容器类和算法来简化网络编程的过程。例如,使用vector可以方便地管理接收或发送的数据;使用algorithm库中的函数可以快速处理数据;使用string类可以方便地操作字符串等。 对于网络编程,C++ STL没有直接提供相应的网络编程接口,而是需要借助于操作系统提供的网络编程库(如Socket套接字编程)来实现网络通信。通过将底层的网络库和STL进行结合,可以更加方便和高效地编写网络应用程序。 在网络编程中,可以使用STL中的容器类来存储和管理从网络中接收到的数据,例如使用vector来存储接收到的数据包,或者使用list来保存已连接的客户端。同时,可以使用STL中的算法来处理这些数据,例如使用find函数查找数据包中的特定元素。 除此之外,STL还提供了一些有用的函数和类,例如thread类可以用于多线程编程,用于处理并发的网络请求;atomic类可以保证对共享数据的原子性操作,用于实现线程安全的网络通信。 总而言之,C++ STLC++编程中的重要工具,它提供了一系列的模板类和函数,可以方便地实现网络编程中的数据管理和算法处理,而网络编程则是利用计算机网络进行数据传输和通信的一种编程方式。 ### 回答3: C++ STL(Standard Template Library)是一组标准库,提供了许多常用的数据结构和算法。它包含的容器类(如vector、list、map等)可以方便地存储和操作数据,而提供的算法则可以实现一些常用的数据处理操作(如排序、查找等)。 在网络编程方面,C++ STL可以使用socket库(socket.h)来实现网络通信。通过socket库,可以创建网络套接字(socket),并使用套接字进行数据的收发。 C++ STL中的vector可以被用来存储接收和发送的数据,可以使用其成员函数push_back()向vector中添加数据,使用operator[]访问vector中的数据。使用vector的好处是可以动态调整容器大小,使得数据存储更加方便。 通过网络套接字的recv()函数可以接收网络中传来的数据,而send()函数可以将数据发送到网络中。需要注意的是,在使用recv()函数接收数据时,应该使用一个循环来确保接收到完整的数据。可以使用std::string和字符数组来存储接收和发送的数据。 除了基本的网络通信,C++ STL还提供了一些辅助函数,用于解析和构造网络地址。例如,使用inet_ntoa()函数可以将IP地址从网络字节顺序转换为字符串形式,而inet_aton()函数则可以将IP地址从字符串形式转换为网络字节顺序。 总而言之,C++ STL可以在网络编程中提供丰富的数据结构和算法,使开发者可以更加轻松地实现各种网络应用。使用网络套接字和STL提供的功能,可以实现数据的发送和接收,并对数据进行各种处理和操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微软技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值