日期:2014-05-18  浏览次数:20742 次

自已设计接口并实现之(不能用系统函数)
自已设计接口并实现之(不能用系统函数)
1.将一个字符串的所有字符转换成小写字母?
2.定义一个二叉树,并求解其叶子节点数目?
谢谢

------解决方案--------------------
挑个简单的写写

void strtolower(const char * src, char * dst)
{
int i = 0;

while (src[i] != '\0')
{
dst[i] = src[i] >= 'A' && src[i] <= 'Z' ? src[i] - 'A' + 'a' : src[i];
++i;
}

dst[i] = '\0';
}
------解决方案--------------------
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>


/*define the flag for program */
#define ERROR NULL

int sum = 0;

typedef int DATA;

struct node{
DATA d;
struct node *left;
struct node *right;
};

typedef struct node NODE;
typedef NODE *BTREE;



/* Creating a binary tree. */
BTREE new_node(void)
{
return (NODE *)malloc(sizeof(NODE));
}


BTREE init_node(DATA d1,BTREE p1,BTREE p2)
{
BTREE t;

t = new_node();

if(t == NULL)
{
return ERROR;
}

t->d = d1;
t->left = p1;
t->right = p2;

return t;
}

/* Creating a linked binary tree from an array. */
BTREE create_tree(DATA a[],int i,int size)
{
if(i >= size)
return NULL;
else
return init_node(a[i],create_tree(a,2*i+1,size),create_tree(a,2*i+2,size));
}



void sumAllNodes(BTREE root)
{
if(root != NULL)
{
sumAllNodes(root->left);

if(root->left == NULL && root->right == NULL)
{
sum++;
}
sumAllNodes(root->right);

}

}


void main(void)
{
int binaryArr[10] = {5,6,7,8,9,10,11,12,15,18};
BTREE BT = create_tree(binaryArr,0,10);
sumAllNodes(BT);
printf("\n%d\n",sum);
getch();
}
------解决方案--------------------
我感觉意思是,写一个接口,里边有这二个方法,但实现类不能用系统函数去实现他的功能,要自己写,比如转换小写就不能直接用
string 类的方法去转
------解决方案--------------------
我还接着回笔,上面说方法实现,可能是这样理解,
方法中来判断字母的ASCII值,
 private override string CharToLower(string str)
{
StringBuilder strBui = new StringBuilder(str);
for (int i = 0; i < strBui.Length; i++)
{
if (strBui[i] >= 65 && strBui[i] <= 90)
{
strBui[i] = (char)(strBui[i] + 32);
}
}

return strBui.ToString();
}
这是我的理解,另一个方法同理,就是不用原本string.ToLower()方法