写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过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; }