用C语言指针实现字符串逆序及回文串的判定
口裴晓英
(新疆兵团高等专科学校新疆·鸟鲁木齐831300)
摘要:字符串逆序输出是C语言经典算法之一,过去利用数组下标处理此类问题,较为繁琐,本文给出
了利用指针实现任意给定字符串的逆序输出方法,以及在此基础上进行回文字符串判断的便捷方法。
关键词:C语言指针字符串逆序算法回文
中图分类号:TP39 文献标识码:A 文章编号:1007-3973(2008 1 12-071.Ol
‘C语言中,实现任意给定字符串的逆序输出,是一道经
典常用算法,掌握此类算法,对于提高运用字符串能力及编
程综合能力都有很大的帮助。对于C语言字符串的处理,人
们惯常使用的是数组下标的方法,不仅效率低,而且估算下
标容易出错,准确率低,最为致命的还是下标一旦越界,会
出现乱码甚至程序崩溃。笔者经过试验、总结,提炼出用指
针实现字符串逆序输出的简便方法,并且在此基础上,应用
此类方法,我们可以方便快捷的解决同类的字符串处理问
题,例如回文的判断,本文也给出了相应实现办法.
1问题
(1)对于任意给定的字符串,进行倒置,打印输出该串
为原串的逆序。例如输入为“tomo玎ow”。则其存储和输出
即为“worromot”。
(2)判断任意给定字符串是否回文,输出相应提示信
息。
所谓“回文串”,即一个字符串正序读和逆序读时都
一样,如“level”或者“noon”等等就是回文串。
2算法思路
问题1)将一个给定字符串逆序存储
定义一个足够大的字符数组,用于存储用户输入的任
意字符串。再定义两个字符指针,分别指向字符串的头部和
尾部,交换两指针指向的字符,交换后两指针分别后移和前
移,循环交换对应位置的字符,直到两指针在中点相遇,则
整个串实现了与原串的逆序存储。
问题2)回文的判定:类似问题1)的处理方法,我们首
先定义一个足够大的字符数组,用于存储用户输入的任意
字符串。再定义两个字符指针,分别指向字符串的头部和尾
部,两指针分别后移和前移,依次判断对应位置的字符是否
相同,一旦不相同即退出循环,说明不是回文串,若一直相
同,直到两指针在中点相遇,则整个串是回文串,输出相应
信息。
问题I)和问题2)的核心算法,都是对对应位置的字
符进行比较判断,故我们都采用指针的方法可以很方便的
解决这两类问题。
3算法实现
对比:用数组下标的方式判定回文的算法实现(结合指
针的运用):
#include“stdio.h”
#include“string.h”
int mmnO
{ ,
char sn-[50J,’p;
im i;
printf(“请输入字符串妇”);
scanq”%s”,s∞;
P-s也
t/把指针移动到字符串的末尾
矿矿strlen(str)-I;
for(i=O;i<(int)strlen(str);i++,p..)
{
if(+p!fstr[i])
{
printff”这个字符串不是回文、Il”);
return l;
}
'
printff”这个字符串是回文、ll”);
return O:
}
对比:用堆栈的方式判定回文的算法实现:
#include<stdio.h>
#define S1'ACK INIT SIZE loo
#dcfine STACK INCltEⅣ【ENT lO
typcdef struct
{
char+base;
char‘top;
int stacksizc;
}SqStack;
int InitStack(SqStack‘S)
{
S->base=(char+)malIoc(STACK—INIT—SIZE+
sizeof(char)):
if(!S->base)
rg:t1.1nl 0:
S->top=S->basc;
S->s。tacksizc;STACK_INIT-sIZE;
rgturn l:
)
int净0:
intj=O;
char str[20],str2120];
斟m论丘·2008年第12期I下)
万方数据
戆黍熬j纛窦鬻鬃
基于SolidWorks拉深模三维CAD系统的研究
口张俊
(宿迁学院机电工程系江苏·宿迁223800)
摘要:本文简要介绍了开发拉深模具三维CAD系统的整体过程,并以凹模为例,详细阐述了模具各零部
件的三维设计步骤,并给出了凹模设计的方法和开发程序。
关键词:拉深模SolidWorks vB
中图分类号:TP39 文献标识码:A 文章编号:1007.3973 I 2008)12-072·02
筒形件拉深模具在汽车、拖拉机、飞机、钟表、电器和仪
表中得到了广泛应用,市场前景良好。目前,三维筒形件拉
深模CAD系统的研究和开发较为滞后,三维系统的开发迫
在眉睫,本研究对于促进模具三维软件的开发、提高模具设
计质量和生产效率、推进模具行业的快速成型技术和促进
制造业的全面发展,均具有重要的研究价值。
本系统采用Windows XP为操作系统、Visual Basic 6.0
为编程工具、SolidWorks 2006为图形处理软件、Microsoft
Access 2003为数据库管理系统。
1系统的需求分析
拉深模CAD系统的任务就是要使设计人员可以快速、
轻松查阅数据和表格,降低对设计人员经验的依赖性,辅助
设计人员进行决策,减轻设计人员绘图劳动,使拉深模设计
更轻松,实现三维造型设计,提高模具质量和设计效率。
筒形件拉深模CAD系统是一个比较复杂的系统,采用
结构化分析方法可简化系统的难度,准确表达用户需求,确
保软件开发成功。系统的详细数据流图如图l所示.
:£媚‘嫱牲0 ,瓤§
图1拉深模CAD系统详细数据流图
2系统结构的设计
本系统由六大模块构成:主控程序、产品信息输入模
块、工艺计算分析模块、模具设计与计算模块、模具三维图
生成模块及专用数据库和图形库。
(1)主控程序
主控程序即程序管理程序,对各模块进行综合管理,用
户通过此界面进入模具的其它各个模块,并对其进行操作。
(2)零件信息输入模块
零件信息输入模块将拉深件的几何尺寸和精度、材料
和工艺条件等信息输入到计算机内,并存入数据库中,为后
续设计提供拉深件的产品信息。
(3)工艺分析与计算模块
工艺分析与计算模块主要对零件的各个参数进行工艺
分析,判断参数是否符合工艺条件,并确定工艺参数。计算
出毛坯尺寸,判断是否能一次拉深成形,计算拉深次数、拉
深系数、各工序的半成品尺寸、压边力、拉深力、拉深功,并
将上述信息存入数据库中,为模具设计打下良好基础。
(4)模具设计与计算模块
模具计算过程包括计算凸、凹模尺寸、圆角半径,计算
零部件尺寸等。设计过程包括确定模具结构类型的选择、工
作部件的设计、辅助零件的设计及模架、标准件的选择。
(5)模具三维图生成模块
在三维绘图环境下,利用CAD软件生成模具零部件的
三维实体模型,最后在此基础上装配成该模具的装配体,为
用户的下一步工作(如生成二维工程图、CAD/CAM的集成
等)做准备。以凹模为例,介绍其开发过程。
SqStack s;
InitStack(&s);
prinff(”请输入一个任意字符串:ha”);
scanf(”‰”.stO;
forCi<strlcn(str);i++)
Push(&s,s仃【i1);
forCj<stricn(str);j++)
Pop(&s,&str20】);
if(strcmp(str,str2)一O)
pri.tf【”是回文串ha”);
clsc
prin氓”不是回文串、II”);
}
4结束语
将给定字符串逆序存储以及判断一个给定字符串是否
是回文,这两类问题,核心算法都是相同的,我们通过熟练
运用指针,可以方便灵活的予以解决,对比给出的数组及堆
栈的处理方法,指针解决方法简洁明了,易懂易用,易于移
植和扩展到相关字符串问题中,便于触类旁通、举一反三。
参考文献:
[1]谭浩强.C程序设计(第二版)[H].清华大学出版
社,2005.
[2]顾晓燕.C语言中指针和指针教学[J].福建电脑.2008年
(01).
[3]吴琼.陈新文.关于指针数组与指向指针的指针教学研
究[J].电脑开发于应用,2007年(总702).
斟协论lij·2008年第12期(下l
万方数据
用C语言指针实现字符串逆序及回文串的判定
作者: 裴晓英
作者单位: 新疆兵团高等专科学校,新疆·乌鲁木齐,831300
刊名:
科协论坛(下半月)
英文刊名: SCIENCE & TECHNOLOGY ASSOCIATION FORUM
年,卷(期): 2008,""(12)
被引用次数: 0次
参考文献(3条)
1.谭浩强C程序设计 2005
2.顾晓燕C语言中指针和指针教学[期刊论文]-福建电脑 2008(01)
3.吴琼.陈新文关于指针数组与指向指针的指针教学研究[期刊论文]-电脑开发与应用 2007(总702)
相似文献(10条)
1.期刊论文吴琼.WU Qiong C语言指针教学方法研究 -鄂州大学学报2009,16(2)
指针是C语言的精华和重要特色,理解指针的概念应从计算机存储系统硬件结构入手,它是C语言学习的重点和难点,数组也是C语言学习的重点和难点
,针对指针数组与指向指针的指针这一教学难点.该文用图示方法将复杂的概念形象地表示出来,用对比方法阐释比较容易混淆的概念,通过简单实用的程
序对比分析二者的应用,揭示它们的区别与编程意义.
2.期刊论文王恒滨.闫东升关于C语言指针定义的讨论 -辽宁财专学报2004,6(2)
在教学和实践中发现,C语言指针定义的信息量不足,难于解释指针使用的许多方面.本文大胆地剖析了已有的定义,从中找出问题所在,并试图加以改
进.还结合实例给出了"拟构"概念,较好地说明了相关知识尤其是指针与数组的关系.
3.期刊论文李忠武.Li Zhong-wu C语言指针探讨 -保山师专学报2005,24(2)
结合实例从五个方面对C语言指针进行分析和探讨:阐述C语言指针的概念和正确使用指针变量,区分指针变量和指针的指向变量的含义和用法;通过判
断变量与运算符*、[]和()的结合顺序来确定变量的数据类型及指向变量或成员变量的类型;指出指针与数组的关系,通过指针来访问数组元素和采用下标
法数组元素的等价关系;作为函数参数的指针变量,可以改变所指向的主调函数变量的值;指针可以实现动态存储分配,用来实现对链表的创建、插入和删
除等操作.
4.期刊论文娄浩韬 C语言指针研究 -硅谷2008,""(2)
指针是C语言的精华,抛开指针的C语言是没有生命力的.我们认为深入理解指针的本质含义,对指针进行理性分析和研究将有助于我们进一步加深对
C语言程序编程的认识和应用.
5.期刊论文陈建辉 C语言指针探讨 -莆田高等专科学校学报2001,8(4)
结合实例从五个方面对C语言指针进行分析和探讨:阐述C语言指针的概念和正确使用指针变量,区分指针变量和指针的指向变量的含义和用法;通过判
断变量与运算符*,[]和()的结合顺序来确定变量的数据类型及指向变量或成员变量的类型;指出指针与数组的关系,通过指针来访问教组元素和采用下标
法数组元素的等价关系;作为函数参数的指针变量,可以改变所指向的主调函数变量的值;指针可以实现动态存储分配,用来实现对链表的创建、插入和删
除等操作.
6.期刊论文深入理解C语言指针 -内江科技2005,""(6)
指针是C语言的精华和核心部分,充分体现了C语言的灵活性,增强了C语言的功能.本文从指针的定义、指针的功能及由于指针的使用带来的安全性等
方面深入地分析了C语言的指针.
7.期刊论文邓满英.DENG Man-Ying 浅析C语言指针 -襄樊职业技术学院学报2010,9(1)
C语言功能丰富、使用灵活方便,主要体现在其指针灵活且无所不指上.指针是C语言的灵魂、精华与根本所在,其内容也是C语言的重点及难点.能否正
确理解和使用指针是衡量学生掌握C语言的一个重要标志,也直接影响学生对<数据结构>和<操作系统>等后续课程的学习和把握.本文从指针的概念、指针
的运算等来浅析C语言指针.
8.期刊论文吴斌.WU Bin C语言指针的教学 -安徽职业技术学院学报2004,3(3)
指针是C语言的低级语言特性.使用指针程序员可以按地址操作计算机内存,灵活实现一些特定功能;使用指针可以方便地表达复杂的数据结构,使程序
简洁、高效、紧凑,指针是整个C语言课程的重点以及后续课程的重要基础.指针是C语言教学难点,在教学中采取适当的策略和方法完全可以取得较为满意
的效果.
9.期刊论文彭程.杨春生C语言指针操作技巧探讨 -中国高新技术企业2008,""(10)
指针增加了我们控制程序的灵活性,但是指针使用不当就会出现野指针,危害整个程序的运行,所以在程序中使用指针时应十分小心,养成良好的编码
习惯,避免出现野指针.
10.期刊论文刘丽梅 复习C语言应注意的几个方面(之四)--针对CCT C语言指针部分 -承德职业学院学报
2005,10(3)
本文主要针对CCT中的C语言部分,在复习时应该注意的几个方面,以讲、例结合的方式作了详细的论述.
温馨提示:内容为网友见解,仅供参考
用C语言编程:使用指针变量实现将一个输入的字符串倒序输出,在每个字 ...
t[20];void main(){ char str[20]; printf("输入字符串:\\n"); scanf("%s",&str); reversed(str); char *s; s = p; printf("逆序为:"); while(*s!='\\0')
C语言编程,要用指针。输入十个数,将最小值与第一个互换,最大值与最后...
int *max,*min,*p,*array_end,temp;\/\/temp为整型变量,用于后面的值交换 array_end=array+10;max=min=array;for(p=array+1;p<array_end;p++)if(*p>*max) max=p;else if(*p<*min) min=p;temp=array[0];array[0]=*min;*min=temp;temp=array[9];array[9]=*max;*max=temp;;} ...
C语言从键盘输入10个数,使用冒泡法对这10个数进行排序。要求使用指针...
voidBubbleSort(inta[],intn){ int i,j,temp,flag=1;for(i=0;i<n-1&&flag;i++)//比较的趟数 { flag=0;//未进行比较,将flag置0 for(j=0;j<n-1-i;j++)//每趟比较的次数 if(a[j]>a[j+1])//由小到大排序 { temp=a[j];a...
C语言 用指针与函数 输入一组字母并将其倒过来输出
文字:(100文字以内)asdfhererw10文字。asdfhererwwrerehfdsaPress any key to continue
C语言编程,输入10个整数,分别按顺序和逆序输出
C语言通过输入十个整数然后分别顺序和逆序输出的编程思想和方法如下:1.首先需要定义一个整型数组用于存储输入的10个整数。这里定义一个数组a。2.然后利用for循环,接受从键盘输入的10个整数。这里使用i作为循环的游标变量。3.输入完毕后,再次利用for循环来顺序输出存储在数组的十个数。这里同样使用局部...
c语言:用指针做函数参数从10个数中找出其中最大值和最小值。
include<stdio.h> main(){ printf("输入10个整数,找出其中最大值和最小值···\\n");int a[10]={0};int max,min,i;for(i=0;i<=9;i++){ printf("请输入第%d个整数:",(i+1));scanf("%d",&a);} max=min=a[0];for(i=0;i<=9;i++){ if(a>max)max=a;if(a<min)...
C语言编程:键盘输入10个数,用函数实现计算数据中最大值、最小值,并返 ...
在主函数中声明一个具有10个int型元素的数组存放键盘输入的数据,声明变量ml记录最大值位置、ms记录最小值位置。自定义一个函数void Input_Max_Min(int *p,int *pl,int *ps)来完成题设要求,其中p是数组首指针,pl是最大值位置(下标)变量指针,ps是最小值位置(下标)变量指针。在主函数中输出结果...
...数组,输出其中的最大数与最小数,分别用指针变量输出数组元素和通过...
方法1:(利用比较法)方法2:(利用起泡法)方法3:(利用函数的模块化设计)
C语言编程,使用指针,完成一字符串中大小写的转换
void main() { char string[] = "characters and &32.98"; printf("The string before conversion is: %s", string); convertToUppercase(string); printf("\/nThe string after conversion is: %s\/n", string); } void convertToUppercase(char *sPtr) { while(*sPtr != '\/0') { if...
c语言中,运用指针,从键盘输入10个整数,求出其中最小值
C语言程序如下:define _CRT_SECURE_NO_WARNINGS include<stdio.h> include<stdlib.h> void input(int* p) { for (int i = 0; i < 10; ++i, ++p) { printf("请输入第%d个数的值\\n", i + 1);scanf("%d", p);} } void print(int* p) { for (int i = 0; i < 10; ...