当前位置: 首页> 科技> 名企 > 烟台定制网站建设价格_注册一个网站多少钱?_成都seo专家_seo整站优化技术培训

烟台定制网站建设价格_注册一个网站多少钱?_成都seo专家_seo整站优化技术培训

时间:2025/7/26 15:18:04来源:https://blog.csdn.net/weixin_50253985/article/details/145937627 浏览次数:0次
烟台定制网站建设价格_注册一个网站多少钱?_成都seo专家_seo整站优化技术培训

今天学习两个类型字符串String和字符串切片(&str)

字符串String是一个堆分配的可变字符串类型

源码

pub struct String {

    vec: Vec<u8>,

}

字符串切片(&str)本质上是一个动态大小的字符串切片,它表示对一段 UTF-8 编码的字符串的不可变视图。

二者区别

特性&strString
存储位置字符串字面值直接存储在程序的静态数据段中(不可变)。动态分配在堆上,大小可以调整。
大小动态大小(DST,动态大小类型),无法直接存储在栈上,需要通过引用使用(如 &str)。堆分配的可变字符串,大小可以调整。
可变性不可变,内容无法更改。可变,内容可以增删改。
所有权无所有权,通常是一个引用(&str)。有所有权,负责管理自己的内存生命周期。
    //声明一个字符串let s = String::new();        // 一个空字符串let s = "Hello".to_string();let s = String::from("world");let s: String = "also this".into();//声明一个字符串切片let s1: &str = "Hello, World"; // 存储在静态内存区域

344. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
 

提示:

1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

pub fn reverse_string(s: &mut Vec<char>) {let mut left = 0;let mut rigth = s.len() - 1;while left < rigth {let temp = s[left];s[left] = s[rigth];s[rigth] = temp;//Rust 不支持i++ 和i--left +=1;rigth -=1;}}
fn main() {let mut s: Vec<char> = vec!['h','e','l','l','o'];reverse_string(&mut s); //传递可变引用println!("{:?}", s);}

总结 本题也是一道算法基础题,与其他语言相比有两点注意的地方,

1.Rust 不支持i++ 和i--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力,但对于会其他语言如Java、Python的同学来讲,初期有点不适应。

2.函数传参 (1)直接 reverse_string(s);//这样所有权就转移,不行,(2) reverse_string(&s);// 传递不可变引用,这样干也不行,(3) reverse_string(&mut s);//传递可变引用, 正确

关键字:烟台定制网站建设价格_注册一个网站多少钱?_成都seo专家_seo整站优化技术培训

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: