CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

!字符串操作

楼主milpas(我带着我的影子去流浪)2001-11-15 17:50:26 在 C/C++ / C语言 提问

感觉C对字符串操作真是麻烦,谁帮我转一下,第一个答对者分都是他的。  
   
  function   StrConvert(s:string):string;  
  var  
      i:integer;  
      v:string;  
  begin  
      v:='';  
      for   i:=1   to   length(s)   do  
          v:=v+IntToStr(Ord(s[i]));  
      s:='';  
      for   i:=1   to   length(v)   do  
          s:=s+v[length(v)-i+1];  
      result:=s;  
  end; 问题点数:120、回复次数:8Top

1 楼kingfish(工作很忙,很少来csdn...)回复于 2001-11-15 18:12:17 得分 0

如果是反转字符串,  
  试试:  
  char*   StrConvert(char   *s)  
  {  
      int   i,len;  
      char   v='   ';  
      len   =   strlen(s);  
   
      for(i=0;i<len/2;i++)  
      {  
        v   =   *(s+i);  
        *(s+i)   =   *(s+len-i-1);  
        *(s+len-i-1)   =   v;  
        }      
      return   s;  
  }Top

2 楼milpas(我带着我的影子去流浪)回复于 2001-11-15 18:45:49 得分 0

除了反转在之前还有一段是把字符串的Ascii码转出来Top

3 楼shenjuefei(沈决非)回复于 2001-11-15 19:33:01 得分 20

#include   <stdio.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  /*  
    *   the   returned   pointer   is   malloced,   so    
    *   free   it   after   used  
    */  
   
  char   *   StrConvert(char   *s)  
  {  
      char   *buf,*p,ch;  
      int   i,j,len,left;  
      int   bufsize;  
   
  #define   _BUF_SIZE   4  
   
      bufsize   =   _BUF_SIZE;  
      buf   =   (char   *)malloc(bufsize);  
   
      left   =   bufsize;  
      for   (i=0,p=buf;s[i];i++)  
      {  
          j   =   snprintf(p,left,"%d",s[i]);  
          if   (j   <   0)   {  
              bufsize   +=   _BUF_SIZE;  
              buf   =   (char   *)realloc(buf,bufsize);  
              if   (buf   ==   NULL)   return   NULL;  
              left   +=   _BUF_SIZE;  
              i--;  
          }  
          else   {  
              p   +=   j;  
              left   -=   j;  
          }  
      }  
      *p   =   0;  
   
      len   =   strlen(buf)/2;  
   
      for   (i   =   0;   i   <   len;i++)  
      {  
          --p;  
          ch   =   buf[i];  
          buf[i]   =   *p;  
          *p   =   ch;  
      }  
      return   buf;  
  }Top

4 楼shenjuefei(沈决非)回复于 2001-11-15 19:40:41 得分 0

kingfish(今飞)的程序最大的问题是会造成缓冲区溢出!  
  在不知道指针   s   指向缓冲区大小的情况下,对s进行写操作,而且,转换后的字串长度一般会大于原来的长度,所以,有缓冲溢出的危险。  
  Top

5 楼kingfish(工作很忙,很少来csdn...)回复于 2001-11-16 08:39:34 得分 0

to   shenjuefei(沈决非):  
        会溢出吗?  
        我认为不会,我上面程序仅是反转而已,  
        "转换后的字串长度一般会大于原来的长度   ",为什么?            
   
        如  
          char   buf[100];  
          buf[0]='\0';  
          strncpy(buf,"kingfish",8);  
          StrConvert(buf);  
   
          有时间可以讨论一下,我的QQ:6657468Top

6 楼shenjuefei(沈决非)回复于 2001-11-16 11:46:07 得分 0

不错,在你的程序中不会溢出。但如果作了字符到数字的转换后,就可能溢出。  
  但,为了避免错误,在不知道输入参数s缓冲区大小的情况下,不应该对他进写操作。  
  Top

7 楼kingfish(工作很忙,很少来csdn...)回复于 2001-11-16 12:20:49 得分 100

to   shenjuefei(沈决非):  
        'A'-->0x41-->"41"  
        一个byte-->2个byte当然需要另外开缓冲  
   
  另外帮milpas   up一下,  
  他用的是Codewarrior,谁熟帮忙看看下面哪个函数有什么可以换?  
   
   
  char*   StrConvert(char   *s)  
  {  
      int   i,len;  
      char   v,*pBuf,*p;  
      len   =   strlen(s);  
     
      pBuf=   new   char[len*2+1];  
      for(i=0,p=pBuf;i<len;i++,p+=2)  
  //     itoa(*(s+i),p,10);               /***********/  
          sprintf(p,"%d",*(s+i));         /**********/  
   
      len   =   strlen(pBuf);  
      for(i=0;i<len/2;i++)  
      {  
        v   =   *(pBuf+i);  
        *(pBuf+i)   =   *(pBuf+len-i-1);  
        *(pBuf+len-i-1)   =   v;  
        }      
      return   pBuf;  
  }  
   
  int   main(void)  
  {  
      char   buf[10]="ABCDEFGH";  
      char   *p;  
      p   =   StrConvert(buf);  
      printf("After   convert   buf=%s\n",p);  
      delete   p;     //不要忘了  
  }  
  Top

8 楼milpas(我带着我的影子去流浪)回复于 2001-11-16 14:30:25 得分 0

在QQ里经kingfish(今飞)兄的帮忙,已经解决了。谢谢kingfish(今飞),也谢谢shenjuefei(沈决非)。Top

相关问题

  • 字符串操作
  • 字符串操作。
  • 字符串操作?
  • 字符串操作
  • 字符串操作
  • 字符串操作
  • 字符串操作?
  • 字符串操作
  • (CString)字符串 + (BYTE)字符串 + (CString)字符串的操作
  • 字符串操作问题

关键词

  • 字符串
  • strconvert
  • bufsize
  • pbuf
  • buf
  • len
  • left
  • char
  • length

得分解答快速导航

  • 帖主:milpas
  • shenjuefei
  • kingfish

相关链接

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

广告也精彩

反馈

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