首页 > 试题广场 >

反转字符串

[编程题]反转字符串
  • 热度指数:155631 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

数据范围: 
要求:空间复杂度 ,时间复杂度
示例1

输入

"abcd"

输出

"dcba"
示例2

输入

""

输出

""
char* solve(char* str ) {
    // write code here
    char *res,*j;
    int i;
    res = (char*)malloc(strlen(str)+1);
    for(i=0;i<strlen(str);i++) {
        res[i] = str[strlen(str)-1-i];
    }
    res[i] = '\0';
    return res;
}

发表于 2024-03-13 15:26:29 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 反转字符串
 * @param str string字符串
 * @return string字符串
 */
#include <string.h>
char* solve(char* str ) {
    // write code here
    char* ret = str;
    int right = strlen(str)-1;
    int left = 0;
    while(left<right)
    {
        char tmp = *(str+left);
        *(str+left) = *(str+right);
        *(str+right) = tmp;
        left++;
        right--;
    }
    return ret;
}
发表于 2023-11-23 21:47:15 回复(0)
开辟了一个空间存放字符串
/**
 * 反转字符串
 * @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;
}


发表于 2022-11-03 11:24:28 回复(0)
char* solve(char* str ) {
    // write code here
    int i, j;
    char str1[1000] = "";
    int length = strlen(str);
    for (i = 0, j = length - 1; i < length / 2, j >= length / 2 ; i++, j--) {
        str1[i] = str[j];
        str1[j] = str[i];
    }
    return str1;
}

发表于 2022-06-30 23:02:52 回复(0)
    int right = strlen(str) - 1;
    int left = 0;
    char tmp;
    while (right > left)
    {
        tmp = *(str + left);
        *(str + left) = *(str + right);
        *(str + right) = tmp;
        right--;
        left++;
    }
    return str;
发表于 2022-05-16 21:44:07 回复(0)
char* solve(char* str ) {
    // write code here
    if(str==NULL){//判断条件
        return NULL;
    }
    int len=strlen(str);
    int head=0,tail=len-1;//双指针法
    while(head<=tail){
        char temp=str[head];
        str[head]=str[tail];
        str[tail]=temp;
        head++;
        tail--;
    }
    return str;
}

发表于 2022-03-23 19:22:51 回复(1)
#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);
}

发表于 2021-11-28 18:58:28 回复(0)
提供一个取巧思路,空间换时间,吃定输入无NULL异常,不用strlen或者遍历获取长度;
static char gStr[1000];
char* solve(char* str ) {
    // write code here
    gStr[999] = '\0';
    gStr[998] = '\0';
    int i = 998; 
    int j = 0;
    
    while(i >= 0 && str[j] != '\0')
    {
        gStr[i] = str[j];
        i--;
        j++;
    }
    return &gStr[++i];
}

发表于 2021-11-28 15:37:10 回复(1)
#include <stdio.h>
#include <string.h>

char solve_str[5] = {0};

char* solve(char* str ) 
{
 int i,len = strlen(str);   
    for(i=0;i<len;i++)
    {
        solve_str[i]=str[len-i-1];
    }
    solve_str[4] = 0;
    return solve_str;
}
int main()
{
 char str[5]= {0};
 int i;
    for(i=0;i<4;i++)
    {
        scanf("%c",(str+i));
    }
    printf("%s",solve(str));
 while(1);
 return 0;   
}
发表于 2021-11-26 23:21:51 回复(0)
C语言,用时2ms,超过100%用户,函数中的数组不用定义为static也可以返回数据,有点奇怪.
定义一个个数为1000的数组,从后面开始存放str的值,待到str结尾时.返回数组的指针.
char* solve(char* str ) {
    // write code here
    char res[1000];
    char *p_res = &res[999], *p_str = str;
    
    *p_res-- = NULL;
    while(*p_str != NULL){
        *p_res-- = *p_str++;
    }
    p_res++;
    
    return p_res;
}

发表于 2021-09-16 09:27:22 回复(0)
#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;
}

发表于 2021-09-04 18:05:21 回复(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;
}

发表于 2021-08-27 00:30:40 回复(2)
char* solve(char* str ) {
    // write code here
    int i,len;
    char temp;
    len = strlen(str);
    for(i=0; i<len/2; i++)
    {
         temp = str[i];
         str[i] = str[len-1-i];
         str[len-1-i] = temp; 
        }
    return str;
}
发表于 2021-08-26 17:01:37 回复(0)
/**
 * 反转字符串
 * @param str string字符串
 * @return string字符串
 */
char* solve(char* str ) {
    // write code here
    int Slen = strlen(str);
    char *RetS = (char*)malloc(Slen*sizeof(char));
   
    for(int i = 0; i < Slen; i++)
    {
        RetS[Slen-1-i] = str[i];
    }
   
    return RetS;
}
发表于 2021-08-25 09:47:53 回复(0)
char* solve(char* str) {
    int len = strlen(str);
    char* p = (char*)malloc(len + 1);
    memset(p,'\0',len + 1);
    for (int i = 0;i < strlen(str);i++) {
        p[i] = str[len-1];
        len--;
    }
    return p;
}
发表于 2021-08-16 22:01:21 回复(0)
//太菜了,只想到这个方法
char* solve(char* str )
{
    // write code here
    char savechar;
    int charlen=0,i=0;
    charlen=strlen(str);
    for(i=0;i<charlen/2;i++)
    {
        savechar=str[i];
        str[i]=str[charlen-i-1];
        str[cnt-i-1]=savechar;
    }
    return str;
}

发表于 2021-08-16 00:23:29 回复(1)
char* solve(char* str )
 {
    // write code here
 #define N  1000
    /* 字符串长度 */
    int strlenNo = strlen(str);
    /* 数组入参不能是变量 */
    char array[N]={0};
    for (int i=0;i<strlenNo;i++)
    {
        array[i] = str[strlenNo-1-i];
    }
    return array;
}
/* 缺陷就是入参字符串长度不能大于N*/
编辑于 2021-07-18 19:56:37 回复(0)

问题信息

上传者:牛客332641号
难度:
19条回答 17112浏览

热门推荐

通过挑战的用户

查看代码
反转字符串