CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

不用strrev函数解决字符串逆序?

楼主benleexi(瘦子)2003-06-02 12:30:07 在 C/C++ / C语言 提问

之所以不能用strrev函数这个问题,我想说的就是因为在linux编译时,老出现  
  In   function   'msqlInsert':  
  undefine   reference   to   'strrev'  
  collect   2:ld   returned   1   exit   status  
  这样的错误,尽管我在前面申明#include   <string.h>也不行。因为不能使用字符串函数(至少是不能用原程序没用过的字符串函数——原因还不明确),我只能用其他方法来替代了。首先把两个结构写出来。  
  [code]typedef   struct   field_ps   {  
                      char   table[NAME_LEN+1],  
                                  name[NAME_LEN+1];  
                      val_t   *value;  
                      int   type,  
                              length,  
                              null,  
                              flags;  
                      strcut   field_ps   *next;  
              }field_t;  
               
   
              typedef   struct   val_s   {  
                      union   val_u   {  
                                int   intVal;  
                                u_char   *charVal;  
                                double   realVal;  
                                indent_t   *identVal;  
                          }val;  
                      int   type,  
                              nullVal,  
                              dataLen;  
            }val_t;[/code]  
   
  一下这个是我针对msqIinsert函数写的整型数据+1操作的程序段    
   
  [code]int   msqlInsert(table,fields,DB)  
  char *table;  
  field_t *fields;  
  char *DB;  
                { int flist[MAX_FIELDS],  
  rowLen,  
  useKey;  
  u_int rowNum;  
  u_char *row;  
  REG   field_t *curField,  
  *curField2;  
  pkey_t *key;  
  cache_t *cacheEntry;  
                        。。。  
                        。。。  
  /********************************************/      
                    curField=fields;  
  while(curField)  
  {  
          if(!curField->value->nullVal)  
              {  
  switch(curField->type)  
        {  
              case   INT_TYPE:  
                        curField->value->val.intVal+=1;  
      break;  
                                                /*   case   CHAR_TYPE:*/  
                                              }  
                                  }  
            curField=curField->next;  
  }  
  /*******************************************/                      
                      。。。  
                      。。。    
                }[/code]  
   
  大家可以看到,我使用了一个该函数自己申明的一个field_t结构的指针变量curField(函数内部它自己申明的,我只是借用)来存储首地址,从而通过修改curFiled->value->val.intVal的值来达到修改目的。    
  我现在希望的是,在case   char_TYPE那里添加一小段程序,使对CHAR_TYPE类型的数据,实现逆序存储。根据我看其他函数程序段,对strlen这这个字符串函数是支持的,这个很重要:),我对C丢了太久了,不知道怎么实现使代码最优?    
  如果对我的前面的话不明白,可以的话,跟我邮箱联系benleexi@sohu.com 问题点数:100、回复次数:9Top

1 楼stukov2002(卡拉是头猪)回复于 2003-06-02 13:17:02 得分 100

 
   
  在开头定义如下变量:  
  int                 nLen;                       //   curField->value->val.charVal的长度  
  int                 nIndex;                   //   下标  
  u_char           *p;                           //   指针  
  u_char           ch;                           //   临时存储字符  
   
  在case   char_TYPE添加如下程序:  
  p   =   curField->value->val.charVal;  
  nLen   =   strlen(p);  
  nIndex   =   0;  
  while(nIndex   <   nLen   /   2)  
  {  
          ch   =   *(p   +   nIndex);  
          *(p   +   nIndex)   =   *(p   +   nLen   -   nIndex   -   1);  
          *(p   +   nLen   -   nIndex   -   1)   =   ch;  
          nIndex   ++;  
  }  
  break;  
   
  对于奇数和偶数长度的字符串均有效.  
   
   
  Top

2 楼arfi()回复于 2003-06-02 13:17:43 得分 0

//字符串逆转函数  
  char   *strrev(char   *str)  
  {  
  char   *bp,   *ep,   temp;  
   
  bp   =   ep   =   str;  
  while(*ep   !=   '\0')  
  ep++;  
  ep--;  
  for(;   bp<ep;   bp++,   ep--)  
  {  
  temp   =   *bp;  
  *bp   =   *ep;  
  *ep   =   temp;  
  }  
  return   str;  
  }  
   
  然后在你的就可以用在你的case中了。  
  case   char_TYPE:  
          strrev(curField->value->val.intVal);  
          ...  
          break;Top

3 楼FBStudio(飞鸟)回复于 2003-06-02 13:19:57 得分 0

char*   mystrrev(char   *str)  
  {  
    char   ch,   *ph,   *pt;  
    int   l;  
    l   =   strlen(str);  
    if   (l   >=   2)  
    {  
        ph   =   str;  
        pt   =   str   +   l   -   1;  
        while   (ph   <   pt)  
        {  
            t   =   *ph;  
            *ph   =   *pt;  
            *pt   =   ch;  
            ph++;  
            pt--;  
        }  
    }  
    return   str;  
  }Top

4 楼Afo1st(飞经南天)回复于 2003-06-02 13:44:32 得分 0

我的代码,权衡一下他们的效率优化问题  
  int   reverse(   char*   str   )  
  {  
          static   char*   tmp;  
          int   i,   j;  
           
           
          i   =   0;  
          j   =   (   strlen(   str   )   -   1   );  
          tmp   =   malloc(   strlen(   str   )   );  
          memset(   tmp,   0,   strlen(   str   )   );  
           
          /*   Copy   string   to   tmp   */  
          memcpy(   tmp,   str,   strlen(   str   )   );  
   
          for(   ;   i   <   strlen(   str   );   i++   )  
          {  
                  str[i]   =   tmp[j];  
                  j--;  
          }  
           
          return   0;  
  }Top

5 楼Clerk_9919(Clerk)回复于 2003-06-02 14:38:59 得分 0

哦???  
  我怎么好像刚刚在linuxeden看到你了??  
  今天,不知道运气会怎么样!!  
   
  ^_^Top

6 楼Clerk_9919(Clerk)回复于 2003-06-02 14:47:42 得分 0

TO:   楼主  
   
  哦???  
  我怎么好像刚刚在linuxeden看到你了??  
  今天,   不知道运气会怎么样!!  
   
  ^_^Top

7 楼benleexi(瘦子)回复于 2003-06-02 18:15:38 得分 0

我哭,完了,不会给分,给了才知道,不能每个人给100的!555555,偶只给了卡拉100分!  
  偶的确是有很多分——但是不知道总给分为100,arfi()   、Clerk_9919(Clerk)   、FBStudio(飞鸟)   你们三位没有得到分的朋友,我另开帖子给你们分,这次不会错了,偶再开一个帖子,再给你们分——5555,实在对不起——我拼了要被封号也好对的起自己的良心。Top

8 楼benleexi(瘦子)回复于 2003-06-02 18:18:28 得分 0

Clerk_9919(Clerk),你在伊甸园帮了偶的忙,谢谢,这个分偶一定要散出来的。大家不急。。欢迎捧场,卡拉兄弟,偶觉得给你100分偶也不亏,谢谢捧场....Top

9 楼benleexi(瘦子)回复于 2003-06-02 18:26:42 得分 0

非技术区可以给分吧?如果可以就请三位到非技术去接分——再次抱歉Top

相关问题

  • VFP6中有没有字符串逆序函数??
  • 字符串函数?
  • 字符串函数
  • 求字符串逆序函数,串内是中英文字符混合,请各位前辈指点。
  • ATL & ANSI字符串函数
  • 字符串比较函数
  • 字符串处理函数
  • 字符串函数问题
  • 字符串匹配函数?
  • 如何用递归逆序字符串?

关键词

  • 函数
  • code
  • curfield
  • 字符串
  • strrev
  • charval
  • val
  • intval
  • 申明
  • 程序

得分解答快速导航

  • 帖主:benleexi
  • stukov2002

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo