今日题目:字符串反转


void swap(char *p1,char *p2){

int temp; 

temp=*p1;

*p1=*p2;

*p2=temp;

}

交换两个值的函数(按地址传递)


int main(){

char a[100];

int len,i,j,start,ct,f;

char *pa,*pb;           准备在函数里交换数组a的值;

scanf("%s",a);

len=strlen(a);


for(j=0;j<len;j++){

    if(a[j]<59 && a[j]>=48){    判断a[j]是数字;(0 的ascii码是 48)

        start=0; ct=0;

        for(i=j;i<len;i++){

            if(a[i]<48||a[i]>58)      

               break;

           ct++;                    ct 是数字长度

            start*=10;

            start+=a[i]-48;     start 为开始反转的数字值;

}


for(i=0;i<(j-start)/2;i++){

        pa = &a[start+i]; pb = &a[j-ct-i];  按地址传递;

            swap(pa,pb);

        }        

        

        for(i=j+ct;i<len;i++)

            a[i-ct]=a[i];           后面的字符向前移动ct位,覆盖已经读入的数字,避免重复;  

            

        len-=ct;          字符串长度进行相应的减少;

        j+=(ct-1);       读入的位置进行相应的移动(j 是读入第一个数字的位置,下一个读入的字符要移到数字串结尾后);

}

}     

for(i=0;i<len;i++)

printf("%c",a[i]);

return 0;


不会在函数里按地址传递改变一整个数组,最后用了最原始的方法,感觉函数也没起到多大作用。

倒是没有特别难的地方,就是复杂,嵌套了好多层,而且字符串长度还会变……


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论