user-0 提问: 利用函数实现字符串颠倒

回复:
user: user-1
content: 引用 6 楼 crucifer10 的回复:[quote=引用 3 楼 starytx 的回复:] 附上代码 void reverseStr(char *str) { 	if (str == NULL || strlen(str) == 0) 	{ 		return; 	} 	char *p1 = str; 	char *p2 = str + strlen(str) - 1; 	while (p1 < p2) 	{ 		char cTemp = *p1; 		*p1 = *p2; 		*p2 = cTemp; 		p1++; 		p2--; 	} }能否帮我看一下下面这个程序有什么不对的地方   #include<stdio.h> #include<stdlib.h> #include<time.h> #define N 101 int search(double *v,int n,double k) { 	int i; 	*v=k; 	for(i=n-1;*(v+i)!=k;i--); 	return i; } int main() { 	double set[N],key; 	int i,pos; 	srand(time(NULL)); 	for(i=1;i<N;i++) 		set[i]=10+rand()%90+(10+rand()%90)*1e-2; 	printf("?key:"); 	scanf("%lf",&key); 	pos=search(set,i,pos); if(set[pos]==key) 		printf("The set[%d] is the KeyNumber.\n",pos); 	else 		printf("No KeyNumber in the set.\n"); 	return 0; }[/quote]pos=search(set,i,pos);？很明显有问题

user: user-2
content: 给你一个原滋原味C的  #include<stdio.h>  void exchange(char *str) {    if(NULL==str) return;     char *p1=str;    char *p2=str;     while(*(p2+1))      p2++;     while(p1<p2)    {        *p1^=*p2;        *p2^=*p1;        *p1^=*p2; 	   p1++; 	   p2--;    } }  int main() {     char s[100]="123456789\0";     puts(s);      exchange(s);     puts(s);      return 0; }

user: user-3
content: for(i=n-1;*(v+i)!=k;i--); i=-1时，没找到，就会数组越界。

user: user-4
content: #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<string.h>    void exchange(char *s,int length) {     char *p=s; 	char c; 	int flag=length/2; 	while(flag) 	{ 		c=*p; 	    *p=(*(s+length-1)); 	    *(s+length-1)=c; 		p++; 		s--; 		flag--; 	} }  int _tmain(int argc, _TCHAR* argv[]) {     char s[100]="zar and leo";     int i,j;     exchange(s,strlen(s));     puts(s); 	system("pause");     return 0; }

user: user-0
content: 引用 3 楼 starytx 的回复:附上代码 void reverseStr(char *str) { 	if (str == NULL || strlen(str) == 0) 	{ 		return; 	} 	char *p1 = str; 	char *p2 = str + strlen(str) - 1; 	while (p1 < p2) 	{ 		char cTemp = *p1; 		*p1 = *p2; 		*p2 = cTemp; 		p1++; 		p2--; 	} }能否帮我看一下下面这个程序有什么不对的地方   #include<stdio.h> #include<stdlib.h> #include<time.h> #define N 101 int search(double *v,int n,double k) { 	int i; 	*v=k; 	for(i=n-1;*(v+i)!=k;i--); 	return i; } int main() { 	double set[N],key; 	int i,pos; 	srand(time(NULL)); 	for(i=1;i<N;i++) 		set[i]=10+rand()%90+(10+rand()%90)*1e-2; 	printf("?key:"); 	scanf("%lf",&key); 	pos=search(set,i,pos); if(set[pos]==key) 		printf("The set[%d] is the KeyNumber.\n",pos); 	else 		printf("No KeyNumber in the set.\n"); 	return 0; }

user: user-0
content: 引用 3 楼 starytx 的回复:附上代码 void reverseStr(char *str) { 	if (str == NULL || strlen(str) == 0) 	{ 		return; 	} 	char *p1 = str; 	char *p2 = str + strlen(str) - 1; 	while (p1 < p2) 	{ 		char cTemp = *p1; 		*p1 = *p2; 		*p2 = cTemp; 		p1++; 		p2--; 	} }谢谢，我改成功了

user: user-0
content: 引用 3 楼 starytx 的回复:附上代码 void reverseStr(char *str) { 	if (str == NULL || strlen(str) == 0) 	{ 		return; 	} 	char *p1 = str; 	char *p2 = str + strlen(str) - 1; 	while (p1 < p2) 	{ 		char cTemp = *p1; 		*p1 = *p2; 		*p2 = cTemp; 		p1++; 		p2--; 	} }能不能只改动一到两处

user: user-5
content: 附上代码 void reverseStr(char *str) { 	if (str == NULL || strlen(str) == 0) 	{ 		return; 	} 	char *p1 = str; 	char *p2 = str + strlen(str) - 1; 	while (p1 < p2) 	{ 		char cTemp = *p1; 		*p1 = *p2; 		*p2 = cTemp; 		p1++; 		p2--; 	} }

user: user-5
content: 定义两个指针p1,p2,p1指向字符串的首字符，p2指向最后一个字符，然后循环p1自增，p2自减，在循环中交换两者指向的字符值，循环结束条件是p1>=p2

user: user-6
content: 参考我的博文http://blog.csdn.net/turingo/article/details/8124432  引用 楼主 crucifer10 的回复:请问该怎么改，，是利用函数实现字符串颠倒  #include<stdio.h> #include<string.h> void exchange(char *c1,char c2) { 	char c; 	c=*c1; 	*c1=c2; 	c2=c; } int main() { 	char s[100]; 	int i,j; 	while(strlen(gets(s))) 	{ 		for(i=0,j=strlen(s)-1;i<j;i++,j--) 			exchange(s+i,s+j-i); 		puts(s); 	} 	return 0; }