笔试编程题(一)
来源:互联网 发布:卡佩拉详细数据 编辑:程序博客网 时间:2024/06/04 19:10
1、写一个函数,它的原型是int continumax(char *outputstr,char *intputstr)。功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,同时把这个最长数字串赋给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值是123456789.
答:
int continumax(char *outputstr,char *intputstr)
{
int i = 0;
int j = 0;
int m = 0;
int len = 0;
int max = 0;
for(i = 0; intputstr[i] != '\0' ; i++)
{
while(intputstr[i] >= '0' && intputstr[i] <= '9')
{
len++;
i++;
}
if(len > max)
{
max = len;
for(j = i - len ; intputstr[j] != '\0' ; j++ )
{
outputstr[m] = intputstr[j];
m++;
}
outputstr[m] = '\0';
}
len = 0;
m = 0;
}
return max;
}
2、通过编程,实现atof函数。
atof函数原型:double atof(const char *nptr);
nptr是字符串的指针;
功能:把字符串转换成浮点数的函数。
答:
double myatof(const char *nptr)
{
double temp = 10; //小数位相除
double ans = 0; //返回的值
bool ispnum = true; //判断是否为正数
if( nptr == NULL)
{ return 0.0;}
while(*nptr == ' ' )
{ nptr++;}
if( *nptr == '-')
{ ispnum = false;
nptr++;
}
else if(*nptr == '+')
{
nptr++;
}
while(*nptr != \0')
{
if(*nptr == '.')
{
nptr++;
break;
}
ans = ans * 10 + (*nptr - '0');
nptr++;
}
while(*nptr != '\0' )
{
ans = ans + (*nptr - '\0')/temp;
temp*=10;
nptr++;
}
if( ispnum)
{ return ans;}
else
{return ans*(-1);}
}
3、输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
struct ListNode{
int m_nKey;
ListNode* m_pNext;
};
答:
方法一:遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前结点元素的指针反转后,利用已经存储的指针往后面继续遍历。
源代码:
void reverse(ListNode ** head)
{
if(head == NULL)
return;
ListNode *pre, *cur , *ne; //前一个结点指针、当前结点指针、后一个结点指针
pre = head;
cur = head->m_pNext;
while(cur) // 指针反转
{
ne = cur->m_pNext;
cur->m_pNext = pre;
pre = cur;
cur = ne;
}
head->m_pNext = NULL;
head = pre;
}
方法二:
递归思想。基本思想是在反转当前结点之前先调用递归函数反转后续结点。
但是!这个方法有一个缺点:在反转后的最后一个结点会形成一个环(反转后的最后一个结点指针指向的是倒数第二个结点),所以必须将函数的返回的结点的next域(指针域)置为NULL,因为要改变head指针,所以用引用。(函数中用二级指针**)
源代码:
ListNode *reverse(ListNode *p , ListNode ** head)
{
if( p == NULL || p -> m_pNext == NULL)
{
head = p;
return p;
}
else
{
ListNode *tmp = reverse(p->m_pNext, head);
tmp->m_pNext = p;
return p;
}
}
ps: 这个函数还未将反转后的最后一个结点指向NULL,此时反转后的最后一个结点指向反转后的倒数第二个结点,倒数第二个指向倒数第一个。。。此时需要将反转后的最后一个结点指向NULL,即之前说的断开这个小环。
- 笔试编程题(一)
- 网易编程笔试题(一):合唱团
- 网易笔试编程题(一)
- 乐视笔试第二编程题(一)
- 笔试编程题:(一)进制转换
- 2018网易内推笔试编程题(一)
- 腾讯2017秋招笔试编程题(一)
- 笔试题(一)
- 笔试题(一)
- 【笔试练习】百度笔试题(一)
- 笔试编程题(网易)
- 华为笔试题(一)
- 笔试题练习(一)
- C++ 笔试题(一)
- 几个笔试题(一)
- 指针笔试题(一)
- 阿里笔试题(一)
- iOS笔试题(一)
- HOGDescriptor with SVM
- 徽章系列6: Api_Level 的使用
- 徽章系列7: codacy 的使用
- windows下使用nvm,以及切换nvm下载源
- 利用chrome浏览器调试js断点
- 笔试编程题(一)
- Camera安卓源码-高通mm_camera架构剖析
- Linux环境下sudo切换用户后执行其他命令
- DICOM基本环境配置
- Fragment系列之嵌套导致错乱的onActivityResult数据传递
- 屏幕旋转切换EditText不保存数据问题
- 2017四川省省赛E
- UVa10340--All in All--子序列--字符串模拟
- Java精选笔记_DBUtils工具