写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
数据范围:
要求:空间复杂度
,时间复杂度
/**
* 反转字符串
* @param str string字符串
* @return string字符串
*/
char* solve(char* str ) {
// write code here
int len =strlen(str);
printf("%d", len);
char * list = NULL;
list = (char *)malloc(len+1);
if(list != NULL) {
for(int i = 0; i < len; i++) {
*(list + i) = *(str + (len-i-1));
}
*(list+len) = '\0';
}
return list;
} #define _CRT_SECURE_NO_WARNINGS 1//vs2019
#include <stdio.h>
#include <string.h>
#define max 100//最大字符串长度
//方法一,原数组元素调换
char* fun1(char* str)
{
int len_str = strlen(str);
char tmp;
for (int i = 0; i < len_str / 2; i++)
{
tmp = str[i];
str[i] = str[len_str - 1 - i];
str[len_str - 1 - i] = tmp;
}
return str;
}
//方法二,指针移动
char* fun2(char* str)
{
int len_str = strlen(str);
char* star=str;//指向首地址
char* end=star+len_str-1;//指向最后
char temp;
while (star<end)//当指针p存储的地址 小于 指针q存储的地址时 循环,即当两个指针指向同一个元素时停止
{
temp = *star;
*star = *end;
*end = temp;
star++;
end--;
}
return str;
}
//方法三,申请一个新的数组存倒序的原数组
char* fun3(char *str)
{
int len_str = strlen(str);
char arr[max] = {0};
for (int i = 0; i < len_str; i++)
arr[i] = str[len_str - 1 - i];//倒序保存
return arr;
}
void main()
{
char str1[max];
gets(str1);
//fun1(str1);
//fun2(str1);
//puts(fun3(str1));
puts(str1);
} #include <stdio.h>
#include <string.h>
char* solve(char* str)
{
// write code here
int j = strlen(str);
int i = 0;
for (i = 0; i < j / 2; i++)
{
int temp = *(str + i);
*(str + i) = *(str + j - 1 - i);
*(str + j - 1 - i) = temp;
}
return str;
}
int main()
{
char arr[] = "abcdef";
char* s_arr = solve(arr);
return 0;
} char* solve(char* str ) {
// write code here
int len = strlen(str);
char *p = str;
char *q = p + len - 1;
while (p < q) {
char temp = *p;
*p = *q;
*q = temp;
p++;
q--;
}
return str;
}