【问题标题】:String reverse using pointers使用指针反转字符串
【发布时间】:2012-05-05 08:41:20
【问题描述】:

我正在尝试使用指针反转字符串。当我尝试打印反转的字符串而不是获取 DCBA 时,我只能以 BA 的身份退出?有人可以帮我吗?

#include<stdio.h>
void reverse(char *);
void main()
{
  char str[5] = "ABCD";
  reverse(str);
}

void reverse(char *str)
{
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s",str);
}

【问题讨论】:

标签: c string pointers reverse using


【解决方案1】:

您丢失了指向字符串开头的指针,因此当您打印它时,您不是从第一个字符开始,因为str 不再指向第一个字符。只需放入一个占位符变量来保存指向字符串开头的指针。

void reverse(char *str)
{
  char *begin = str; /* Keeps a pointer to the beginning of str */
  char *rev_str = str;
  char temp;
  while(*str)
      str++;
  --str;

  while(rev_str < str)
  {
      temp = *rev_str;
      *rev_str = *str;
      *str = temp;   
      rev_str++;      
      str--;
  }
  printf("reversed string is %s\n", begin);
}

【讨论】:

    【解决方案2】:
    char* strrev(chr* src)
    {      
           char* dest
           int len=0, index=0 , rindex=0;
    
           while(*(src+len) != '\0')
           { len++ }
    
           rindex=len-1;
    
           while(rindex > =0)
           {
               *(dest+index) = *(src + rindex)
                index++;
                rindex--;
           }
    
          *(dest+index) = '\0';
    
    
    return dest;
    }
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多