(原创) 对入门和初学很有帮助的程序
/* 用C语言(宏定义 条件编译 指针与自定义函数)实现字符串的,(复制,链接,交换,剪切,插入,小转大,大转小,求长度,比较,查找), *//* 十项操作 */
/* 用两天时间完成*/
#include<stdio.h>
#include <conio.h>
#define clrscr() ; /* 如:你的编译是VC++ 把这项注释打开 */ /*已打开不用改了*/
#define PR printf /* 宏定义,输出 */
#define SC scanf /* 宏定义,输入 */
#define STRCPY /* 宏定义,拷贝 */
#define STRLINK /* 宏定义,链接 */
#define STRSWAP /* 宏定义,交换 */
#define STRCUT /* 宏定义,剪切 */
#define STRINST /* 宏定义,插入 */
#define STRL /* 宏定义,长度 */
#define STRCOMP /* 宏定义,比较 */
#define STRLR /* 宏定义,小转大 */
#define STRUR /* 宏定义,大转小 */
#define STRSEAR /* 宏定义,查找 */
/*函数小转大*/
void StrLr(char *str1)
{
char *p;
p=str1;
for(;*p!='\0';)
if(*p>='a'&&*p<='z')
{*p-=32;
p++;}
else
break;
*p='\0';
}
/*大转小函数*/
void StrUr(char *str1)
{
char *p;
p=str1;
for(;*p!='\0';)
if(*p>='A'&&*p<='Z')
{*p=*p+32;
p++;}
else
break;
*p='\0';
}
/*比较函数*/
StrComp(char *str1,char *str2)
{
char *p,*q;
p=str1;
q=str2;
while(*p==*q&&*p!='\0')
{ p++;
q++;}
return *p++-*q++;
}
/*查找函数*/
StrSear(char *str1,char *str2)
{
char t[50],*p,*q;
int i,j,m=0,n=0;
p=str1;
q=str2;
for(;*p!='\0';)
{ m++;
p++;}
*p='\0';
for(;*q!='\0';)
{ n++;
q++;}
*q='\0';
p=str1;
q=str2;
for(i=0;i<=m-n+1;i++)
{ for(j=0;j<n;j++)
t[j]=str1[i+j];
t[j]='\0';
if(!StrComp(t,str2))break;}
if(i==m-n+2)
return 0;
else
return 1;
}
/*求长度函数*/
StrL(char *str1)
{
int i=0;
char *p;
p=str1;
for(;*p!='\0';)
{p++;
i++;}
return i;
}
/*插入函数*/
void StrInst(char *str1,char *str2,int num)
{
char tem[50],tem2[50],*p,*q,*s1,*s2;
int i=0;
p=str1;
q=str2;
s1=tem;
s2=tem2;
for(;*p!='\0';)
{
if(i<num-1)
{*s1++=*p++;
i++;}
else
{*s2++=*p++;}
}
*s1='\0';
*s2='\0';
s2=tem2;
for(;*q!='\0';)
*s1++=*q++;
*s1='\0';
for(;*s2!='\0';)
*s1++=*s2++;
*s1='\0';
s1=tem;
p=str1;
for(;*s1!='\0';)
*p++=*s1++;
*p='\0';
}
/*剪切函数*/
void StrCut(char *str1,int start,int end)
{
char tem[50],*p,*q;
int i=0,j=0;
p=str1;
q=tem;
for(;*p!='\0';)
{ if(i>=(start-1)&&i<=(end-1))
{i++;
p++;
continue;}
else
{tem[j]=*p;
i++;
j++;
p++;}
}
tem[j]='\0';
p=str1;
for(;*q!='\0';)
*p++=*q++;
*p='\0';
}
/*交换函数*/
void StrSwap(char *str1,char *str2)
{
char sap[50],*p,*q,*t;
p=str1;
q=str2;
t=sap;
for(;*p!='\0';)
*t++=*p++;
*t='\0';
p=str1;
q=str2;
for(;*q!='\0';)
*p++=*q++;
*p='\0';
p=str1;
q=str2;
t=sap;
for(;*t!='\0';)
*q++=*t++;
*q='\0';
}
/*链接函数*/
void StrLink(char *str1,char *str2)
{
char *p,*q;
p=str1;
q=str2;
for(;*p!='\0';)
p++;
for(;*q!='\0';)
*p++=*q++;
*p='\0';
}
/*拷贝函数*/
void StrCpy(char *str1,char *str2)
{
char *p,*q;
p=str1;
q=str2;
for(;*q!='\0';)
*p++=*q++;
*p='\0';
}
/*主调函数和一些条件编译*/
int main(void)
{
int number;
int start,end;
char string1[50],string2[50];
char *str1,*str2;
str1=string1;
str2=string2;
/*条件复制*/
#ifdef STRCPY
clrscr();
PR("拷贝字串:\n");
PR("STRCPY:\n");
PR("请输入第二个字符串:\n");
PR("str2= ");
SC("%s",str2);
StrCpy(str1,str2);
PR("str1=%s\n",str1);
getch();
#endif
/*条件链接*/
#ifdef STRLINK
clrscr();
PR("连接字符:\n");
PR("STRLINK:\n");
PR("请输入第一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("请输入第二个字符串:\n");
PR("str2= ");
SC("%s",str2);
StrLink(str1,str2);
PR("str1=%s\n",str1);
getch();
#endif
/*条件交换*/
#ifdef STRSWAP
clrscr();
PR("交换字符串:\n");
PR("STRSWAP:\n");
PR("请输入第一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("请输入第二个字符串:\n");
PR("str2= ");
SC("%s",str2);
StrSwap(str1,str2);
PR("str1=%s\n",str1);
PR("str2=%s\n",str2);
getch();
#endif
/*条件剪切*/
#ifdef STRCUT
clrscr();
PR("剪切字符串:\n");
PR("STRCUT:\n");
PR("请输入一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("请输入起始和终止点用数字表示:\n");
PR("Please start and end num:\n");
SC("%d%d",&start,&end);
StrCut(str1,start,end);
PR("str1=%s\n",str1);
getch();
#endif
/*条件插入*/
#ifdef STRINST
clrscr();
PR("字符串插入:\n");
PR("STRINST:\n");
PR("请输入第一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("请输入第二个字符串:\n");
PR("str2= ");
SC("%s",str2);
PR("请输入插入位子用数字表示:\n");
SC("%d",&number);
StrInst(str1,str2,number);
PR("str1=%s\n",str1);
getch();
#endif
/*条件长度*/
#ifdef STRL
clrscr();
PR("求长度:\n");
PR("STRL:\n");
PR("请输入一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("strlen=%d\n",StrL(str1));
getch();
#endif
/*条件比较*/
#ifdef STRCOMP
clrscr();
PR("比较字串(相同返回零,否则返回第一个不同的差值:\n");
PR("STRCOMP:\n");
PR("请输入第一个字符串:\n");
PR("str1= ");
SC("%s",str1);
PR("请输入第二个字符串:\n");
PR("str2= ");
SC("%s",str2);
PR("strcomp=%d\n",StrComp(str1,str2));
getch();
#endif
/*条件小转大*/
#ifdef STRLR
clrscr();
PR("小写转大写:\n");
PR("STRLR:\n");
PR("请输入一个小写字符串:\n");
PR("str1= ");
SC("%s",str1);
StrLr(str1);
PR("strlr=%s\n",str1);
getch();
#endif
/*条件大转小*/
#ifdef STRUR
clrscr();
PR("大写转小写:\n");
PR("STRUR:\n");
PR("请输入一个大写字符串:\n");
PR("str1= ");
SC("%s",str1);
StrUr(str1);
PR("strur=%s\n",str1);
getch();
#endif
/*条件查找*/
#ifdef STRSEAR
clrscr();
PR("查找字符串,找到返回1,否则返回0。:\n");
PR("STRSEAR:\n");
PR("输入第一个串:\n");
PR("str1= ");
SC("%s",str1);
PR("输入要找的串:\n");
PR("str2= ");
SC("%s",str2);
PR("strsear=%d\n",StrSear(str1,str2));
getch();
#endif
return 0;
}
[[italic] 本帖最后由 xianshizhe111 于 2008-1-3 21:22 编辑 [/italic]]