
用指针实现字符串的反序存放
3个回答
展开全部
算法分析:
1、效果实例:“abcde”->“edcba”
2、仔细观察实例,我们会发现,要实现字符串的反序存放,只需将字符与其对称的另外一个字符交换即可,依次交换至对称中心(对称中心不交换)。比如实例中就是以字符c为中心,那么显然a和e,b和d都是相互对称的字符,只要交换它们位置即可,c位置不变。
那么,如果是偶数个字符的话,可以分为左右相等个数字符的字符串,对称中心以中线为界即可。
程序如下:
main()
{
char str[9]="abcdefghi";
char c;
int i=0;
for(i=0;i<=3;i++)
{
c=str[i];
str[i]=str[9-i];/*如果字符串的长度为L,那么第i个字符与第L-i个字符恒为对称*/
str[9-i]=c;
}
/*交换完毕*/
}
打印程序这里就不多复述,程序过长,让人眼皮累。
1、效果实例:“abcde”->“edcba”
2、仔细观察实例,我们会发现,要实现字符串的反序存放,只需将字符与其对称的另外一个字符交换即可,依次交换至对称中心(对称中心不交换)。比如实例中就是以字符c为中心,那么显然a和e,b和d都是相互对称的字符,只要交换它们位置即可,c位置不变。
那么,如果是偶数个字符的话,可以分为左右相等个数字符的字符串,对称中心以中线为界即可。
程序如下:
main()
{
char str[9]="abcdefghi";
char c;
int i=0;
for(i=0;i<=3;i++)
{
c=str[i];
str[i]=str[9-i];/*如果字符串的长度为L,那么第i个字符与第L-i个字符恒为对称*/
str[9-i]=c;
}
/*交换完毕*/
}
打印程序这里就不多复述,程序过长,让人眼皮累。
展开全部
看哥哥我的.仅供参考!
法1: (重新分配空间, 再倒序存放,浪费空间,不好)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;
len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);
return 0;
}
法2:(开头字符跟结尾字符交换,往中间压缩循环)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *start = str;
int len = 0, tmp = 0;
len = strlen(str);
while (len >= 1)
{
tmp = *start;
*start = *(start + len - 1);
*(start + len - 1) = tmp;
start++;
len -= 2;
}
printf("str = %s\n", str);
return 0;
}
法3:(同法2)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
int tmp = 0;
while (start - end <= 0)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
printf("str = %s\n", str);
return 0;
}
法2和法3类似.比法1好.
法1: (重新分配空间, 再倒序存放,浪费空间,不好)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;
len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);
return 0;
}
法2:(开头字符跟结尾字符交换,往中间压缩循环)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *start = str;
int len = 0, tmp = 0;
len = strlen(str);
while (len >= 1)
{
tmp = *start;
*start = *(start + len - 1);
*(start + len - 1) = tmp;
start++;
len -= 2;
}
printf("str = %s\n", str);
return 0;
}
法3:(同法2)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
int tmp = 0;
while (start - end <= 0)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
printf("str = %s\n", str);
return 0;
}
法2和法3类似.比法1好.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-06-19
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;
len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);
return 0;
}
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;
len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询