主题:C语言问题
了解就好
[专家分:0] 发布于 2011-01-11 02:13:00
编写一个函数f(char *s),其功能是把字符串中的内容逆置。例如,字符串
中原有的内容为abcde,则调用该函数后,字符串中的内容为edcba。
我是个菜鸟,希望哪位帮个忙???
回复列表 (共10个回复)
沙发
了解就好 [专家分:0] 发布于 2011-01-11 02:18:00
char *pf;
main()
{
char str[]={'a','b','c','d','e'};
int i,j;
char *p=str;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(*(p+i)>*(p+j))break;
else
{*pf=*(p+j);
*(p+j)=*(p+i);
*(p+i)=*pf;
}
}
}
printf("%s",str[]);
}
这是我自己写的,可是用TC编译运行的时候就出问题,这是怎么回事??/
板凳
fragileeye [专家分:1990] 发布于 2011-01-11 09:41:00
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
int main(int argc, char *argv[])
{
char *pf=(char *)malloc(MAXSIZE*sizeof(char ));
char str[]={'a','b','c','d','e','\0'};
int i,j;
char *p=str;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(*(p+i)>*(p+j))break;
else
{
*pf=*(p+j);
*(p+j)=*(p+i);
*(p+i)=*pf;
}
}
}
free(pf);
printf("%s",str);
return 0;
}
这是按照lz最大原意改写的,目前发现的错误有:
1,指针所指元素不能随便修改,在没有分配空间的前提下
2,字符数组初始化,如用以上方式,注意显示加‘\0’
3,printf输出字符串应为str,原因lz应该懂……
3 楼
了解就好 [专家分:0] 发布于 2011-01-12 00:51:00
十分感谢,很受教!!
4 楼
ts1111 [专家分:0] 发布于 2011-01-12 04:31:00
九州娱乐城(ts111.net)各种彩票投注,各种精彩赛事投注,何需往外跑,现在在家就可进得投注,手机也能进行投注,在线棋牌游戏应有尽有,斗地主,德州、台16张麻将等绝对是你最好的选择
5 楼
jasonstanli [专家分:20] 发布于 2011-01-12 16:08:00
回答的很精彩 赞!
[url=http://www.nl-weixiu.com]能率热水器维修[/url]
6 楼
5402105 [专家分:0] 发布于 2011-01-13 17:04:00
#include "Stdio.h"
#include "Conio.h"
main()
{
char *p,*q;
p="abcdef";
q=p;
printf("%s",p);
while(*p!='\0')
p++;
while(p!=q)
printf("%c",*(p--));
printf("%c",*p);
getch();
}
用指针做得,希望能帮到你
7 楼
xchbcahz [专家分:50] 发布于 2011-01-18 10:46:00
我自己写了个可以把英文句子倒过来,但单词字母顺序仍为正常顺序。FYI。
比如:
输入 This is a book
输出 book a is This
#include<stdio.h>
#define M 20
void fun(char *x,int m)
{
char p[M],*x_end,*word_end,*word_begin,*p_start;
int j=0;
x_end=x+m-1;
word_end=x_end;
word_begin=x_end;
p_start=p;
for(;word_begin>=x;word_begin--)
{
if(*word_begin==' ')
{
char *word_write;
int k=1;
word_write=word_begin;
for(;(word_write+k)<=word_end;k++)
{
if(*(word_write+k)!=' ')
{
*p_start=*(word_write+k);
p_start++;
}
}
*p_start=' ';
p_start++;
word_end=word_begin;
}
else if(word_begin==x)
{
char *word_write;
int k=0;
word_write=word_begin;
for(;(word_write+k)<=word_end;k++)
{
if(*(word_write+k)!=' ')
{
*p_start=*(word_write+k);
p_start++;
}
}
}
}
*p_start='\0';
for(;p[j]!='\0';j++)
x[j]=p[j];
x[j]='\0';
}
void main()
{
int i,n;
char a[M];
printf("Enter n:\n");
scanf("%d",&n);
getchar();
if(n<M)
{
printf("The original array:\n");
for(i=0;i<n;i++)
*(a+i)=getchar();
a[i]='\0';
fun(a,i);
printf("\nThe array inverted:\n");
for(i=0;*(a+i)!='\0';i++)
printf("%c",*(a+i));
getchar();
getchar();
}
}
8 楼
御风独舞 [专家分:0] 发布于 2011-01-30 13:22:00
先strlen出数组的长度
然后malloc一个跟这个长度一样长的临时数组
循环一遍,从头到尾扫描原数组,每次把原数组元素复制到临时数组的最后一个非空位置。
完了以后memcpy一下这个临时数组到原数组覆盖
结束后不要忘记free一下这个临时数组
9 楼
cd1041220113 [专家分:0] 发布于 2011-02-05 15:14:00
我也喜欢这个方法,不过感觉太麻烦
10 楼
Jig [专家分:1180] 发布于 2011-02-25 17:05:00
哥来写个
void f(char *s)
{
int i, len = strlen(s);
for (i = 0; i < len/2; i++)
{
*(s+i) = (*(s+i) + *(s+(len-1-i))) - (*(s+(len-1-i)) = *(s+i));
}
}
够短吧,呵呵,没编译,但应该可以,去试试吧!
我来回复