c语言的问题字符串反转

1 #include <stdio.h>
2 #include <string.h>
3 main()
4 {
5 char *a = "abc";
6 char *rever(char *dest,const char *src);
7 char *b = (void *)malloc(strlen(a)+1);
8 printf("%s\n", rever(b,a));
9 }
10 char *rever(char *dest,const char *src)
11 {
12 int n = strlen(src)-1;
13 for (*dest = *(src+n);n>=0;dest++,n--);
14 return dest;
15 }

我想实现字符串反转,请问,我写的这个程序错在哪里。。。谢了。。
10-15行大家别看了。。。。看下面新的。。。帮我看看错在哪里。谢了。。。

10 char *rever(char *dest,const char *src)
11 {
12 int n;
13 for (n = strlen(src)-1;n>=0;dest++,n--)
14 *dest = *(src+n);
15 return dest;
16 }

因为你在dest++时,改变了dest的指向的位置,所以没有输出正确的结果。

按照你的程序给你修改了一下,请参考。
1 #include <stdio.h>
2 #include <string.h>
#include <malloc.h> // 注意这里:增加使用malloc的头文件,消除warning
3 main()
4 {
5 char *a = "abc";
6 char *rever(char *dest,const char *src);
7 char *b = (void *)malloc(strlen(a)+1);
memset(b, 0x00, sizeof(strlen(a)+1)); // 注意这里:对malloc的buf进行初始化
8 printf("%s\n", rever(b,a));
9 }

10 char *rever(char *dest,const char *src)
11 {
12 int n;
char *temp = dest; // 注意这里:用来记录dest的初始地址
13 for (n = strlen(src)-1;n>=0;dest++,n--)
14 *dest = *(src+n);
15 return temp; // 注意这里:返回dest字符串的首地址
16 }

程序给你测试通过。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-06-10

c语言的问题字符串反转可以使用下列两种方法:

    使用Array.Reverse方法

    对于字符串反转,我们可以使用.NET类库自带的Array.Reverse方法
    public static string ReverseByArray(string original)
    {
    char[] c = original.ToCharArray();
    Array.Reverse(c);
    return new string(c);
    }

    可以使用栈后进先出的特性来对数组进行反转。先将数组所有元素压入栈,然后再取出,顺序很自然地就与原先相反了。
    public static string ReverseByStack(this string original)
    {
    Stack<char> stack = new Stack<char>();
    foreach (char ch in original)
    {
    stack.Push(ch);
    }
    char[] c = new char[original.Length];
    for (int i = 0; i < original.Length; i++)
    {
    c[i] = stack.Pop();
    }
    return new string(c);
    }

第2个回答  2010-01-16
rever()函数修改如下:

char *rever(char *dest,const char *src)
{
int n = strlen(src)-1;
for (dest += n,*(dest+1)=0;n>=0;dest--,n--)
*dest=*src++;
return dest+1;
}

c语言的问题字符串反转
14 *dest = *(src+n);15 return temp; \/\/ 注意这里:返回dest字符串的首地址 16 } 程序给你测试通过。

字符串反转
在C语言编程中,我们有时需要对字符串进行反转操作,这可以通过迭代实现。下面是一个简单的例子,展示了如何使用迭代方式来完成字符串反转。首先,我们需要定义一个名为iterative的函数,它接受两个参数,一个是待反转的字符串p,另一个是临时存储反转后字符串的指针tmp。函数的目的是逐个字符地交换p字符...

c语言:函数reverse()是什么?
C语言中函数reverse的功能是反转字符串。以下是 一、函数定义与功能 在C语言中,reverse函数通常被用来反转字符串。该函数接收一个字符串作为输入,并返回反转后的字符串。需要注意的是,C语言标准库中并没有直接提供reverse函数,通常需要根据具体需求自行实现。二、函数实现细节 实现reverse函数的方式有很多...

C语言 reverse 反转字符串问题
从一端开始,一直到字符串中间位置,每个字符,与结尾处对称位置字符对调值即可。函数如下:char *reverse(char *s){ int l, i; char t; l = strlen(s); for(i = 0; i <= l\/2; i ++) { t = s[i]; s[i] = s[l-i-1]; s[l-i-1] = t; }...

C语言 把字符串前后倒置
这样改就好了:void fun(char*s){int i,j=0,n;char t[100];\/\/t不要和s指向同一个字符串,不然后面的赋值操作有点乱套。n=strlen(s);for(i=n-1;i>=0;i--)\/\/i==0的时候也要复制过去。t[j++]=s[i];for(i=0;i<n;i++)s[i]=t[i];s[++i]='\\0';} ...

C语言,输入一个字符串反向输出,为什么会这样?
方法一:在字符串数组的最后添加空字符,表示字符串的结束。方法二:给字符串数组赋初始值,全部赋为空字符'\\0'。方法一代码:include <stdio.h>#include <string.h>int main(){printf("input:\\n");char a[20],b[20];scanf("%s",&a);int n; n=strlen(a);int i;for(i=0;i<n;i+...

用C语言实现一个字符串的反序(如:“123”转换成“321”),要求时间复杂...
include<stdio.h>void main(){ char str[100]; int i = 0; printf("Input a string: "); scanf("%s", str); printf("reversed string: "); while(str[i]) i++; while(i) printf("%c", str[--i]); printf("\\n");} ...

C语言大数相加,字符反转怎么弄?
1. 使用Array.Reverse方法 对于字符串反转,我们可以使用.NET类库自带的Array.Reverse方法 public static string ReverseByArray(string original){ char[] c = original.ToCharArray();Array.Reverse(c);return new string(c);} 2. 使用字符缓存 在面试或笔试中,往往要求不用任何类库方法,那么有朋友...

一道C语言题目。请问这题是如何实现字符串倒序的呀,如何读程序?还有get...
这个是利用了递归函数的特点,把“输入字符并递归处理”放在“输出字符”之前,这样输入字符后,如果不是\\n字符,就先进入下一层递归,而不是先输出当前这个字符,等到下一层递归返回后,才输出当前字符,那么下一层递归输入的字符就会在本层字符之前得到显示。所以就实现了字符串倒序。大致的过程是这样:...

编写一个C语言函数,把字符串中的字符反过来。
include <string.h>char *fun(char *str){ int length = strlen(str);int i;char temp;for(i = 0; i < length\/2; i++){ temp = str[i];str[i] = str[length-i-1];str[length-i-1] = temp;} return str;}void main( ){ char str[100];gets(str);printf("%s\\n", fun...

相似回答