5

我写了一个程序来反转一个字符串..但它不起作用..它正在打印被扫描的相同字符串..代码有什么问题?

#include <stdio.h>
#include <stdlib.h>
char *strrev(char *s)
{
        char *temp = s;
        char *result = s;
        char t;
        int l = 0, i;
        while (*temp) {
                l++;
                temp++;
        }
        temp--;
        for (i = 0; i < l; i++) {
                t = *temp;
                *temp = *s;
                *s = t;
                s++;
                temp--;
        }
        return result;
}

int main()
{
        char *str;
        str = malloc(50);
        printf("Enter a string: ");
        scanf("%s", str);
        printf("%s\n\n", strrev(str));
        return 0;
}
4

8 回答 8

15
for (i = 0; i < l; i++)

您正在遍历整个字符串,因此您要反转它两次-毕竟它不会反转。只走一半:

for (i = 0; i < l / 2; i++)

int len = strlen()此外,如果您被允许这样做,请尝试使用而不是 while-not-end-of-string 循环。

于 2013-01-04T06:39:27.717 回答
4

您交换字符串的内容两次。

于 2013-01-04T06:38:51.853 回答
2

使用以下代码..

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

char *strrev(char *s)
{
     char *temp = s;
     char *result = s;
     char t;
     while (*temp)
          temp++;

     while (--temp != s)
     {
            t = *temp;
            *temp = *s;
            *s++ = t;
     }
     return result;
 }

 int main()
 {
      char *str;
      str = (char*)malloc(50);
      printf("Enter a string: ");
      scanf("%s", str);
      printf("%s\n\n", strrev(str));
      return 0;
  }
于 2013-01-04T10:34:03.070 回答
1

逻辑是将开始到前半部分的字符与后半部分最后的字符交换,即最多 len/2。只需按如下方式修改您的 for 循环 & 它会为您正常工作 for (i = 0; i < l/2; i++) {

于 2013-01-04T06:57:49.893 回答
1

你可以使用这个简单的代码

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


int str_len (char *str)
{
   char *ptr = str;
    while (*str)
     str++;
   return str - ptr;
}

int main ()
{
  char *str;
  int length;
  str = (char*)malloc(50);
  printf("Enter a string: ");
  scanf("%s", str);
  length = str_len(str) - 1;

  for (int i = length ; i >= 0 ; i--)
  printf ("%c", str[i]);
  return 0;
}
于 2013-01-04T07:48:15.797 回答
1
you can use this code to reverse the string
#include<stdio.h>
#include<string.h>
int main()
{
    int n,i;
    char str2[100],str1[100];
    printf("enter teh string 1\n");
    gets(str1);
    n = strlen(str1);
    for(i=0;i<n;i++)
    {
    str2[n-1-i]=str1[i];
    }
    printf("%s\n",str2);

}
于 2015-05-28T08:38:34.280 回答
0

实际上你正在反转字符串两次......所以在到达字符串中间之后,你应该终止循环,即你的循环应该运行一半的字符串长度,即 l/2(在这种情况下)。所以你的循环应该像

for(i = 0; i < i / 2; i++)
于 2013-01-04T07:08:20.533 回答
0

交换字符串内容两次..

交换一次会有所帮助..

for (i = 0; i < l/2; i++)
于 2013-01-18T09:57:49.817 回答