主题:几个头疼的函数编程题
云端的蚂蚁
[专家分:0] 发布于 2009-05-04 22:35:00
请教三个关于函数的编程题目
1. 编程:删除整型数组中指定位置的元素。
2. 编程:求一个字符串中所有的小写字母的ASCII码的平方根之和。
3. 编程:完成字符串拷贝的功能。(注意:不能使用strcpy()函数)
回复列表 (共7个回复)
沙发
一个好孩子 [专家分:0] 发布于 2009-05-11 16:22:00
1.删除数组里的元素,好像只能将其后面的元素依次前移
2.主要是检验出小写字母,它的ASCII码是固定范围的 可以判断
3.数组的话 可以依次赋值;也可以用链表,设定两个工作指针,依次后移
板凳
廖增祥 [专家分:3930] 发布于 2009-05-20 16:23:00
1. 题目不太明确,删除后是把这个元素置零?还是把后面的元素前移再把最后一个数置零?
2. [code=c]float sum(const char *lpszText)
{
float f = 0;
while (*lpszText)
{
if (*lpszText >= 'a' && *lpszText <= 'z')
{
f += (float)sqrt(*lpszText);
}
lpszText ++;
}
return f;
}[/code]
3. [code=c]
char *StringCopy(char *szDest, const char *lpszSrc)
{
if (NULL == szDest || NULL == lpszSrc)
return szDest;
return (char *)memcpy(szDest, lpszSrc, strlen(lpszSrc));
}[/code]
3 楼
AIHANZI [专家分:60] 发布于 2009-05-26 13:55:00
1.
void del (linh *head,int i)
{
int j=1;
link *p;
p=head->next;
while((p!=NULL)&&(j<i))
p=p->next;
j++
if(p!=NULL) p=p->next; delete p;
}
3 .
void copy(char *,char *)
{
char A[x],char B[];
for(int i=0;i<x;i++)
char B[i]=char A[i];
}
4 楼
tr0217 [专家分:730] 发布于 2009-06-03 23:14:00
[quote]1. 题目不太明确,删除后是把这个元素置零?还是把后面的元素前移再把最后一个数置零?
2. [code=c]float sum(const char *lpszText)
{
float f = 0;
while (*lpszText)
{
if (*lpszText >= 'a' && *lpszText <= 'z')
{
f += (float)sqrt(*lpszText);
}
lpszText ++;
}
return f;
}[/code]
3. [code=c]
char *StringCopy(char *szDest, const char *lpszSrc)
{
if (NULL == szDest || NULL == lpszSrc)
return szDest;
return (char *)memcpy(szDest, lpszSrc, strlen(lpszSrc));
}[/code][/quote]
楼主真是的看不懂就不给分啊,这个代码可比三楼的好多了。
5 楼
廖增祥 [专家分:3930] 发布于 2009-08-31 13:43:00
[quote][quote]1. 题目不太明确,删除后是把这个元素置零?还是把后面的元素前移再把最后一个数置零?
2. [code=c]float sum(const char *lpszText)
{
float f = 0;
while (*lpszText)
{
if (*lpszText >= 'a' && *lpszText <= 'z')
{
f += (float)sqrt(*lpszText);
}
lpszText ++;
}
return f;
}[/code]
3. [code=c]
char *StringCopy(char *szDest, const char *lpszSrc)
{
if (NULL == szDest || NULL == lpszSrc)
return szDest;
return (char *)memcpy(szDest, lpszSrc, strlen(lpszSrc));
}[/code][/quote]
楼主真是的看不懂就不给分啊,这个代码可比三楼的好多了。[/quote]
第二题如果字符串长度很长的话,还可以用下面的方法。
建立一个表,用于记录每个小写字母出现的次数,那么平方根就只用算一次了,再乘上这个倍数就OK了
2. [code=c]float sum(const char *lpszText)
{
float f = 0;
int i;
unsigned int nTable[26];
memset(nTable, 0, sizeof(int) * 26);
while (*lpszText)
{
if (*lpszText >= 'a' && *lpszText <= 'z')
{
nTable[*lpszText - 'a'] ++;
}
lpszText ++;
}
for (i = 0; i < 26; i ++)
{
f += (float)(nTable[i] * sqrt(i + 'a'));
}
return f;
}[/code]
6 楼
廖增祥 [专家分:3930] 发布于 2009-08-31 13:46:00
[quote]
1.
void del (linh *head,int i)
{
int j=1;
link *p;
p=head->next;
while((p!=NULL)&&(j<i))
p=p->next;
j++
if(p!=NULL) p=p->next; delete p;
}
3 .
void copy(char *,char *)
{
char A[x],char B[];
for(int i=0;i<x;i++)
char B[i]=char A[i];
}
[/quote]
3 楼的代码有严重的问题, 声明数组有这样声明的?char A[x],char B[];
7 楼
廖增祥 [专家分:3930] 发布于 2009-08-31 13:54:00
1. 简单写个代码吧,随便参考下,没编译的
[code=c]
////////////////////////////////////////////
// RemoveElem: 删除元素
// 参数:
// a [in][out] 待操作的数组
// nLen [in][out] 数组元素个数
// nElem[in] 待删除的数
// 返回值:
// 成功返回非零值, 失败返回 0
int RemoveElem(int a[], int &nLen, int nElem)
{
int i;
for (i = 0; i < nLen; i ++)
{
if (a[i] == nElem)
{
for (++ i; i < nLen; i ++)
{
a[i - 1] = a[i];
}
return 1;
}
}
return 0;
}
[/code]
我来回复