| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5204 人关注过本帖, 9 人收藏
标题:(原创) 对入门和初学很有帮助的程序
只看楼主 加入收藏
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏(9)
 问题点数:0 回复次数:44 
(原创) 对入门和初学很有帮助的程序
/* 用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]]
收到的鲜花
  • 厦门土匪2008-01-20 17:04 送鲜花  2朵   附言:典型的教程 设计思路清晰. 代码整洁规范. ...
  • ilylia2008-03-03 12:13 送鲜花  2朵   附言:精品文章
搜索更多相关主题的帖子: 入门 定义 define 初学 
2008-01-02 23:11
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
这个版没有代码高亮功能吗?

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-02 23:15
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
没有高亮.好用吗?
2008-01-02 23:24
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
就是不知道有没有啊·有的话看代码就方便点

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-02 23:28
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
[attach]31798[/attach]
输入一行一回车,都是字符串操作.
这个程序提示用少了(就是请输入第一串,和输入第二串)全修改完了.

[[italic] 本帖最后由 xianshizhe111 于 2008-1-3 19:57 编辑 [/italic]]
2008-01-02 23:37
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
大家没兴趣吗?
难吗长吗?
全都做成了模块化,注释一下可分段编译.
这可是学习C语言的必经之路哇!
好东东啊!
不要沉
鼎鼎顶
2008-01-03 21:10
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
函数默认返回为int但不要不写.

倚天照海花无数,流水高山心自知。
2008-01-03 22:04
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
主要这些函数大都都有库函数版本:不要再造轮子,不过拿来学习还是不错的
strcat (char*, const char*);
 int  strcmp (const char*, const char*)   ;
  int  strcoll (const char*, const char*);   
 char*  strcpy (char*, const char*);
  size_t  strcspn (const char*, const char*)  ;
  char*  strerror (int); /  size_t  strlen(const char*);

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-03 22:10
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
谢谢7#板主提示(我这是指针)
我知道都有库函数,但这对大家自己编函数不是有帮助吗?你说那
板主加个精吧!
鼓励 鼓励
我会更加努力

[[italic] 本帖最后由 xianshizhe111 于 2008-1-5 00:01 编辑 [/italic]]
2008-01-03 22:25
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
我不是板主啊,我加不了

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-03 23:08
快速回复:(原创) 对入门和初学很有帮助的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052349 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved