回 帖 发 新 帖 刷新版面

主题:几个头疼的函数编程题

请教三个关于函数的编程题目




1.   编程:删除整型数组中指定位置的元素。

2.  编程:求一个字符串中所有的小写字母的ASCII码的平方根之和。

3.  编程:完成字符串拷贝的功能。(注意:不能使用strcpy()函数)

回复列表 (共7个回复)

沙发

1.删除数组里的元素,好像只能将其后面的元素依次前移
2.主要是检验出小写字母,它的ASCII码是固定范围的 可以判断
3.数组的话 可以依次赋值;也可以用链表,设定两个工作指针,依次后移

板凳

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 楼


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 楼

[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 楼

[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 楼

[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 楼

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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册