程序使用对话框界面功能要求:用户可以输入任意长度的字符串,编写一个函数(见函数功能),通过调用该函数得到结果,并显示出来。函数功能:将源字符串中的所有数字取出来,每3个数字为1组,组间增加一个逗号,最后不满3个数字的舍弃,相同的组只保留第一个,这样组成一个新的目标字符串。注意:目标字符串和源字符串不能使用同一空间,请不要使用CString和string,而只允许使用char, char*,LPCSTR, LPSTR等类型例:用户输入:123d的ff34df0532-34jh00,34,99908 结果:123,340,532,034,999 说明:其中两个340,只保留第一个 340,最后的08,不满三个数字,舍弃了。请务必使用VC++ 6.0请高手们帮帮忙,把具体代码贴出来了,最好有一些注释搞定之后在加分
程序使用对话框界面功能要求:用户可以输入任意长度的字符串,编写一个函数(见函数功能),通过调用该函数得到结果,并显示出来。函数功能:将源字符串中的所有数字取出来,每3个数字为1组,组间增加一个逗号,最后不满3个数字的舍弃,相同的组只保留第一个,这样组成一个新的目标字符串。注意:目标字符串和源字符串不能使用同一空间,请不要使用CString和string,而只允许使用char, char*,LPCSTR, LPSTR等类型例:用户输入:123d的ff34df0532-34jh00,34,99908 结果:123,340,532,034,999 说明:其中两个340,只保留第一个 340,最后的08,不满三个数字,舍弃了。请务必使用VC++ 6.0请高手们帮帮忙,把具体代码贴出来了,最好有一些注释搞定之后在加分
ULONG analchar(LPCSTR sour, LPSTR* ppDest)
{
ULONG slen,dlen=0,tag=0;
slen=strlen(sour);
char* temp=new char[slen];
CPtrArray chararrar;//用来储存分割开来的字符串
for (int i=0;i<slen;i++)
{
if (sour[i]<0)
continue;
if(isdigit((int)sour[i]))
{
temp[dlen]=sour[i];
dlen++;tag++;
if (!(tag%3))
{
//在这里加上相同的数字判断代码,相同就删除
temp[dlen++]=',';
}
}
}
int lastcount=tag%3;
if (lastcount)
{
temp[dlen-lastcount-1]='\0';
} temp[dlen-1]='\0';
*ppDest=temp;
return dlen-2;
}
//调用代码
char* test="123d的ff34df0532-34jh00,34,99980";
LPSTR dest;
analchar(test,&dest);
delete dest;
1、因为3位数字最多有1000种排列方式,你可以分配一个长度为4000的字符串用来储存结果,另外定义一个长度为1000的BOOL型数组来记录每种排列是否前面已经出现。(按照节省内存空间的原则应该用位表示,不过如果不在意内存用量,用BOOL比较容易)
2、定义一个小缓冲区,用循环每次读入一个字符,如果不是数字则直接抛弃,是数字则存入缓冲区,达到3个后转换为数值,以该值为下标判断BOOL型数组中对应的元素,如果为TRUE,则跳过其它操作重新开始读取字符,如果是FALSE,则修改为TRUE,并将小缓冲区中的字符复制到结果缓冲区中(加上逗号),然后重新开始读取字符,直到用户输入Enter为止(最后去掉多余的逗号)。
{
BOOL re=TRUE;
int count=chararray->GetCount();
if (!count)
{
return TRUE;
}
for (int i=0;i<count;i++)
{
char* temp=(char*)chararray->GetAt(i);
int test=strcmp(sour,temp);
if(test==0)
{
re=FALSE;
break;
}
}
return re;
}
////////////////////
ULONG distilchar(LPCSTR sour, LPSTR* ppDest)
{
ULONG slen,jishu=0;
slen=strlen(sour);
char* temp1=new char[4];
CPtrArray chararray;
for (int i=0;i<slen;i++)
{
if (sour[i]<0)
continue;
if(isdigit((int)sour[i]))
{ temp1[jishu]=sour[i];
jishu++;
if (jishu==3)
{
jishu=0;
temp1[3]='\0';
if(chek(temp1,&chararray))
{
char* temp2=new char[4];
strcpy(temp2,temp1);
chararray.Add(temp2);
} }
}
} int count=chararray.GetCount();
if (count==0)
{
return 0;
}
char* temp=new char[count*3+count];
strcpy(temp,(char*)(chararray.GetAt(0)));
for (int i=1;i<count;i++)
{
strcat(temp,",");
char* charat=(char*)(chararray.GetAt(i));
strcat(temp,charat);
}
for (int i=0;i<count;i++)
{
char* charat=(char*)(chararray.GetAt(0));
chararray.RemoveAt(0);
delete charat;
}
delete [] temp1;
*ppDest=temp;
return count;
}
/////////////////////
//调用代码
char* test="123d的ff34df0532-34jh00,34,999858uugygu65545yniu6y8rgh0456y9tgj904jer687jhb[wrtk--965w3w90-945650945";
LPSTR dest;
distilchar(test,&dest);
delete dest;