C++ string获取字符串元素:[]和at()

转自 http://c.biancheng.net/view/1446.html

 

在通常情况下,string 是 C++ 中的字符串。字符串是一种特殊类型的容器,专门用来操作字符序列。

字符串中元素的访问是允许的,一般可使用两种方法访问字符串中的单一字符:下标操作符[] 和 成员函数at()。两者均返回指定的下标位置的字符。第 1 个字符索引(下标)为 0,最后的字符索引为 length()-1。

需要注意的是,这两种访问方法是有区别的:

  • 下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 '\0')是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 '\0'。
  • 函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。

 

#include <iostream>
#include <string>
int main()
{
    const std::string cS ("c.biancheng.net");
    std::string s ("abode");
    char temp =0;
    char temp_1 = 0;
    char temp_2 = 0;
    char temp_3 = 0;
    char temp_4 = 0;
    char temp_5 = 0;
    temp = s [2]; //"获取字符 'c'
    temp_1 = s.at(2); //获取字符 'c'
    temp_2 = s [s.length()]; //未定义行为,返回字符'\0',但Visual C++ 2012执行时未报错
    temp_3 = cS[cS.length()]; //指向字符 '\0'
    temp_4 = s.at (s.length ()); //程序异常
    temp_5 = cS.at(cS.length ()); //程序异常
    std::cout << temp <<temp_1 << temp_2 << temp_3 << temp_4 << temp_5 << std::endl;
    return 0;
}

通过对上述代码的分析可知,要理解字符串的存取需要多实践、多尝试,并且要牢记基础知识和基本规则。

为修改 string 字符串的内容,下标操作符 [] 和函数 at() 均返回字符的“引用”。但当字符串的内存被重新分配以后,可能会发生执行错误。

 

#include <iostream>
#include <string>
int main()
{
    std::string s ("abode");
    std::cout << s << std::endl ;
    char& r = s[2] ; //建立引用关系
    char*p=&s[3]; //建立引用关系
    r='X' ;//修改内容
    *p='Y' ;//修改内容
    std::cout << s << std::endl; //输出
    s = "12345678"; //重新赋值
    r ='X'; //修改内容
    *p='Y'; //修改内容
    std::cout << s << std::endl; //输出
    return 0;
}

程序输出结果为:

abode
abXYe
12XY5678

在例 2 中,使用 Visual C++ 2012 编译器编译,字符串被重新赋值后,修改其中某位置字符的值,仍然成功。这与前面所述的“可能会发生执行错误”其实并不矛盾。因为,从意义上讲,字符串被重新赋值后,只是其原来的引用关系已经没有意义了。

使用 Playwright 在 Python 中提取字符串中的元素,可以使用 Python 内置的字符串切割函数,例如 split() 函数,也可以使用 Playwright 提供的字符串切割函数,例如 split_text() 函数。 下面是一个使用 Playwright 在 Python 中使用 split_text() 函数提取字符串中的元素的示例: ```python from playwright.sync_api import Playwright, sync_playwright def run(playwright: Playwright) -> None: # 启动浏览器 browser = playwright.chromium.launch() page = browser.new_page() # 导航到网页并获取元素文本 page.goto("https://www.example.com") element_text = page.query_selector("h1").text_content() # 使用 split_text() 函数提取字符串中的元素 result = element_text.split_text(" ")[0] print(result) # 关闭浏览器 browser.close() with sync_playwright() as playwright: run(playwright) ``` 在以上代码中,我们首先启动了 Playwright 的 Chromium 浏览器,并导航到了一个示例网页。然后,我们使用 `page.query_selector("h1").text_content()` 获取了网页中 `<h1>` 元素的文本内容,并将其赋值给 `element_text` 变量。接下来,我们使用 `element_text.split_text(" ")[0]` 函数提取了文本内容中第一个元素,并将其保存到 `result` 变量中。最后,我们将 `result` 打印输出。 如果你想使用 Python 内置的字符串切割函数,例如 split() 函数,只需要将以上代码中的 `element_text.split_text(" ")[0]` 改为 `element_text.split(" ")[0]` 即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值