Skip to content

Commit e89feeb

Browse files
committed
提交非标准库实验
1 parent acd6f9a commit e89feeb

File tree

1 file changed

+52
-4
lines changed
  • exercises/02_no_std_dev/01_mem_primitives/src

1 file changed

+52
-4
lines changed

exercises/02_no_std_dev/01_mem_primitives/src/lib.rs

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,12 @@ pub unsafe extern "C" fn my_memmove(dst: *mut u8, src: *const u8, n: usize) -> *
8080
/// `s` must point to a valid null-terminated byte string.
8181
#[unsafe(no_mangle)]
8282
pub unsafe extern "C" fn my_strlen(s: *const u8) -> usize {
83-
// TODO: Implement strlen
84-
todo!()
83+
// Implement strlen
84+
let mut i = 0;
85+
while *s.add(i) != 0 {
86+
i = i + 1;
87+
}
88+
i
8589
}
8690

8791
/// Compare two null-terminated byte strings.
@@ -95,8 +99,52 @@ pub unsafe extern "C" fn my_strlen(s: *const u8) -> usize {
9599
/// `s1` and `s2` must each point to a valid null-terminated byte string.
96100
#[unsafe(no_mangle)]
97101
pub unsafe extern "C" fn my_strcmp(s1: *const u8, s2: *const u8) -> i32 {
98-
// TODO: Implement strcmp
99-
todo!()
102+
let len1 = my_strlen(s1);
103+
let len2 = my_strlen(s2);
104+
let mut i = 0;
105+
// Implement strcmp
106+
match len1.cmp(&len2) {
107+
core::cmp::Ordering::Equal => {
108+
while i < len1 {
109+
if *s1.add(i) != *s2.add(i) {
110+
if *s1.add(i) > *s2.add(i) {
111+
return 1;
112+
}else {
113+
return -1
114+
}
115+
}
116+
i = i+1;
117+
}
118+
0
119+
},
120+
core::cmp::Ordering::Greater => {
121+
while i < len2 {
122+
if *s1.add(i) != *s2.add(i) {
123+
if *s1.add(i) > *s2.add(i) {
124+
return 1;
125+
}else {
126+
return -1
127+
}
128+
}
129+
i = i+1;
130+
}
131+
1
132+
133+
},
134+
core::cmp::Ordering::Less => {
135+
while i < len1 {
136+
if *s1.add(i) != *s2.add(i) {
137+
if *s1.add(i) > *s2.add(i) {
138+
return 1;
139+
}else {
140+
return -1
141+
}
142+
}
143+
i = i+1;
144+
}
145+
-1
146+
}
147+
}
100148
}
101149

102150
// ============================================================

0 commit comments

Comments
 (0)