开发十年,就只剩下这套Java开发体系了 >>>
描述
给一个长度为n的字符串,怎么实现循环右移k位,k可能大于n
方案
使用undafe关键字,将string转为slice,在原slice上进行操作。
实现
lib.rs
use std::string::String;
#[derive(Debug)]
struct ShirftString {
string :String,
length : usize,
}
impl ShirftString {
pub fn new(string:String)->ShirftString{
string.is_ascii();
let length = string.len();
ShirftString{
string,
length,
}
}
fn swap(&mut self,a:usize,b:usize){
assert!(a usize{
let mut temp = (index+self.length-shift_amount)%self.length;
while temp < index{
temp = (temp+self.length-shift_amount)%self.length
}
return temp;
}
pub fn right_shirft(&mut self,shift_amount:usize){
let _shift_amount = shift_amount%self.length;
let mut swap_index:usize;
for i in 0..self.length{
swap_index = self.get_swap_index(i,_shift_amount);
self.swap(i,swap_index);
}
}
pub fn get_string(&self)->&String{
&self.string
}
}
main.rs
extern crate shirftstring;
fn main() {
let mut s = ShirftString::new("hello world".to_string());
s.right_shirft(5);
println!("{}",s.get_string());
}
算法详解
~blablabla~
小结
> rust 无论是str还是string:String类型均无法通过索引进行读取或修改;
> 以上方案不支持除ASCII以外编码的字符串