用指针写strrev函数
时间: 2024-02-22 18:57:47 浏览: 111
可以通过以下方式使用指针来实现strrev函数:
```c
#include <stdio.h>
#include <string.h>
void strrev(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
char temp;
while (start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char str[] = "hello world";
printf("Before reversal: %s\n", str);
strrev(str);
printf("After reversal: %s\n", str);
return 0;
}
```
在上面的代码中,我们使用了两个指针start和end,分别指向字符串的开始和结束。在while循环中,我们交换这两个指针所指向的字符,直到它们相遇或者交错为止。这样,就完成了字符串的翻转。
相关问题
c语言strrev函数的实现不使用指针
可以使用数组来实现字符串反转,不使用指针。具体实现如下:
```c
#include <stdio.h>
#include <string.h>
void strrev(char s[]) {
int len = strlen(s);
char temp;
for (int i = 0; i < len / 2; i++) {
temp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = temp;
}
}
int main() {
char s[] = "hello world";
strrev(s);
printf("%s\n", s); // 输出:dlrow olleh
return 0;
}
```
在这个实现中,我们先求出字符串的长度,然后利用循环将字符串前半部分和后半部分依次交换,从而实现字符串反转。
不使用strrev()函数写
如果你想在不使用 `strrev()` 函数的情况下实现C语言的字符串反转,可以使用指针或者数组下标来完成。以下是两种基本方法:
**方法一:通过两个指针交换字符**
```c
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
int len = strlen(str);
char temp;
for(int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len - i - 1]; // 交换位置
str[len - i - 1] = temp;
}
}
int main() {
char num_str[5];
// ...其他部分与之前一样...
// 反转字符串后再判断
reverse(num_str);
if (strcmp(str, num_str) == 0) {
printf("%04d ", num);
}
return 0;
}
```
在这个版本中,我们创建了一个 `reverse()` 函数,通过迭代字符串的一半并交换对应的字符来进行反转。
**方法二:借助数组下标**
```c
#include <stdio.h>
#include <string.h>
int main() {
char num_str[5];
// ...其他部分与之前一样...
// 使用数组下标反转字符串
for(int i = 0, j = strlen(str) - 1; i < j; ++i, --j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
if (strcmp(str, num_str) == 0) {
printf("%04d ", num);
}
return 0;
}
```
这个版本同样实现了字符的交换,但使用了两个变量 `i` 和 `j` 分别指向字符串开始和结尾,逐步向中间移动。
阅读全文