当前位置:编程学习 > C/C++ >>

C语言指针问题

编写函数,将字符串反向。 函数首部为: void ReverseString(char *s) 比如: 输入abcABC123 输出321CBAcba
答案:#include<string.h>
#include<stdio.h>
void  main(void)
{
char *s;
void ReverseString(char *s);
printf("请输入字符串:\n");
gets(s);
ReverseString(s);
}

void ReverseString(char *s)  /*这个函数绝对符合你的要求 只是有点作弊的嫌疑  嘿嘿 ^-^  */
{
int i;
i=strlen(s);

for(i-=1;i>=0;--i)
 {
   printf("%c",*(s+i)); /*我记得有一个命令可以直接跳到字符串的指针尾部 只不过我忘记了 你把这下标的引用 换成那个命令就行了 就是百分百的指针处理了*/
 } 

 getch();
}
其他:#include<stdio.h>
void reverse_string(char *string)
{
   /* 算法的关键是当两个指针相遇或擦肩而过时就停止 */
   char *p;
   /* 把p设置为指向字符串的最后一个字符 */
   for(p=string;*p!='\0';p++);
   p--;
   /* 交换p和string所指向的字符,然后string前进一步,p后退一步,在两个指针相遇或擦肩而过之前重复整个过程 */
   while(string<p)
   {
      char temp;
      temp=*string;
      *string++=*p;
      *p--=temp;

   }

}
int main(void)
{
   char *str="gasd";
   reverse_string(str);
   printf("after reversed:%s\n",str);
   return 0;
} 1楼的,你这个指针的位置都变了,打印出来肯定不是反过来的字符串。

我在1楼的基础上改一下就好了。

void reverse_string(char *string)
{
   /* 算法的关键是当两个指针相遇或擦肩而过时就停止 */
   char *p;
char *p_head;
p_head = string;
   /* 把p设置为指向字符串的最后一个字符 */
   for(p=string;*p!='\0';p++);
   p--;
   /* 交换p和string所指向的字符,然后string前进一步,p后退一步,在两个指针相遇或擦肩而过之前重复整个过程 */
   while(p_head <p)
   {
      char temp;
      temp=*p_head ;
      *p_head ++=*p;
      *p--=temp;

   }

}

这样不会改变指针string的位置,这样再main函数里面字符串指针还是没有变 #include <stdio.h>
#include <string.h>
#include <stdlib.h>

void ReverseString(char *s)
{
  int i=0,len=0;
  len=strlen(s);
  char p;
  for(i=0;i<(len+1)/2;i++)//第一个字符和最后一个字符交换,第二个字符和倒数第二个字符交换,直到字符串中间为止。
  {
    p=s[i];
    s[i]=s[len-i-1];
    s[len-i-1]=p;
  }

}

int main(int argc, char **argv)
{
  char a[1024];
  memset(a,0,1024);
  puts("Input a string:");
  gets(a);
  printf("Before:%s\n",a);
  ReverseString(a);
  printf("After:%s\n",a);
return 0;
}
C:\mypro>gcc -g -Wall ReverseString.c -o ReverseString

C:\mypro>ReverseString
Input a string:
just a test!
Before:just a test!
After:!tset a tsuj

C:\mypro>
程序已调试好,直接运行即可。 根据你的要求编写的函数
void ReverseString(char *s)
{
  int len=strlen(s);
  for(int i=0,j=len-1;i<j;i++,j--)
  {
    char p=s[i];
    s[i]=s[j];
    s[j]=p;
  }
vc6.0调试没问题。
} void ReverseString(char *s) 
{
      int nlen = strlen(s);

     for(int i = nlen - 1; i >=0; --i)
     {
         printf("%c", s[i]);
     }

    printf("\n");
} #include<stdio.h>
#include<string.h>
#define N 20
void ReverseString(char *s)
{
	int i,j=0,n;
	char a[N];
	n=strlen(s);

	for(i=n-1;i>=0;i--)
	{   
		a[j]=a[i];
		j++;

	}

}
void main()
{
	char  t[N];
	int i;
	scanf("%s",t);
	ReverseString(t);
	printf("%s",t);

}

上一个:关于C语言的基础编程,一个提问。NO.4
下一个:关于C语言的基础编程,一个提问。NO.6

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,