!字符串操作
感觉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




