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