前天去华为面试做不出的题目,哪位前辈能帮忙看看?
偶平时用惯了VC++ MFC,不知不觉硬把C++最基础的东西给丢了,郁闷啊
身边又没有书,恳请大伙指点指点。
1.请将字符串“abcdefgh"格式化为"hgfedcba",写出算法。
2.从字符串p中返回第x个q的地址,错误返回NULL。
char* fun(char* p,char q,int x)
问题点数:20、回复次数:39Top
1 楼llf_hust()回复于 2005-06-19 14:06:43 得分 0
1.请将字符串“abcdefgh"格式化为"hgfedcba",写出算法
int Reverse(char *s)
{
if(*s)
Reverse(s+1);
putchar(*s);
}
Top
2 楼fireman_lh()回复于 2005-06-19 14:07:18 得分 5
1.写成栈放进去,然后加到队列中?
2.char* fun( char* p, char q, int x )
{
int i = 0;
int j = 0;
if p == NULL
return NULL;
while( p[i] != '\0' )
{
if( p[i] == q )
j++;
if j == x
return &p[i];
i++;
}
if p[i] == '\0'
return NULL;
}
小弟才疏学浅,随便写的,如果有低级错误的地方,各位不要笑话^_^
Top
3 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-06-19 14:09:23 得分 0
基础很重要。Top
4 楼cornsoup()回复于 2005-06-19 14:25:04 得分 0
是啊,不能把基础给丢了,谢谢各位提携!Top
5 楼mylovelypig(猪的魅力!......)回复于 2005-06-19 16:40:30 得分 0
这么基本的东西没搞懂还敢去华为面试呀?
第一个非常简单呀,用系统函数Reverse可实现;
如果非要自己写实现算法的话,那么无非就是考数据结构的基本内容,
根据栈的后进先出(或说先进后出)原理,可用栈实现!
Top
6 楼OpenHero(开勇)回复于 2005-06-19 16:48:07 得分 0
~~~~我怎么没有面试的机会????Top
7 楼mostideal(三甲)回复于 2005-06-19 17:12:44 得分 0
dingTop
8 楼fg100emil(fg100大鸟)回复于 2005-06-19 21:39:51 得分 5
第一题 如果是要考你数据结构的话
你可以试试这个 递归调用 应该罩住了 ^-^
#include<iostream>
using namespace std;
void ss(char *str)
{if(*str=='\0') //
return; // 这两行可以改成 if(*str)
ss(str+1);
cout<<*str;
}
void main()
{
char *s="abcdefgh";
ss(s);
cout<<endl;
}
Top
9 楼zixiu2008(子休)回复于 2005-06-19 22:25:38 得分 0
第一题是什么意思?
逆序还是降序排序?Top
10 楼yhbttfile(小兵)回复于 2005-06-19 23:00:24 得分 10
to fireman_lh() :
根据你的代码,做了稍微的修改:
char* fun( char* p, char q, int x )
{
if(p == NULL) // 增加了括号
return NULL;
unsigned int uiCount(0); // 变量在使用是才定义,避免不必要的堆栈对象的初始化
char c;
while((c = *p++) != '\0')
if(c == q)
{
++uiCount; // 使用++前操作符,避免临时对象的产生(可以看看++前操作符的实现细节)。
if(uiCount == x)
return --p;
}
return NULL;
}
Top
11 楼fg100emil(fg100大鸟)回复于 2005-06-19 23:27:20 得分 0
当然是逆序了
不是有题号么Top
12 楼sdut_hf(寒风)回复于 2005-06-20 09:08:59 得分 0
我晕
华为就考这样的题,不是把。。。Top
13 楼free000(无剑)回复于 2005-06-20 09:40:11 得分 0
void FormatStr(char *str,int count)
{
char *lpHead=str;
char *lpTail=str+count-1;
for(;;)
{
if(lpHead>=lpTail)break;
char c=*lpHead;
*lpHead=*lpTail;
*lpTail=c;
lpHead++;
lpTail--;
}
}Top
14 楼goodgoodwork(永不放弃)回复于 2005-06-20 09:43:48 得分 0
华为面试的题目都很基础Top
15 楼free000(无剑)回复于 2005-06-20 09:52:04 得分 0
char* fun(char* p,char q,int x)
{
int count=0;
char *lpC=p;
for(;*lpC!='\0';lpC++)
{
if(*lpC==q)
{
count++;
if(count==x)return lpC;
}
}
return NULL;
}Top
16 楼Microsnow(冰火)回复于 2005-06-20 09:58:50 得分 0
对不起,在C++ Builder版中的第一题写错一个地方,在此版更正:
void strformat(char *strSour)
{
if (strSour == NULL)
throw "Invalid argument";
int len = strlen(strSour);
for(int i=0; i<len/2; i++)
{
char temp = strSour[i];
strSour[i] = strSour[len-i-1];
strSour[len-i-1] = temp;
}
cout<<strSour<<endl;
getch();
}Top
17 楼nana_2005(娜娜)回复于 2005-06-20 10:11:17 得分 0
考基础是要看你的编程习惯,看你是否考虑到程序的大小、运行效率、容错处理等等的吧?
老实说,我的基础也不好,都是用VC用的,标准C++ 都忘光了。
汗颜哪
Top
18 楼xnlcx(J2EE.Net)回复于 2005-06-20 10:31:00 得分 0
我也一样,经常用VC,什么数据结构差不多忘光了,自己基础也不好Top
19 楼lucymary1982()回复于 2005-06-20 10:45:55 得分 0
强啊,大家都Top
20 楼lgmdyh(廖国明)回复于 2005-06-20 11:10:40 得分 0
靠,我进华为的时候没有这么容易的题啊.建议看看数据结构吧!Top
21 楼wawage()回复于 2005-06-20 11:11:08 得分 0
方法多啊!!!厉害!Top
22 楼rick29(rick.z)回复于 2005-06-20 11:18:07 得分 0
题目说明了“逆置”么?没的话
if (s == "abcdefgh") s = "hgfedcba"; return s;Top
23 楼richen_99(品味生活)回复于 2005-06-20 11:32:34 得分 0
楼上的厉害!Top
24 楼aceouter(outer)回复于 2005-06-20 11:46:37 得分 0
第一题的解法还是llf_hust的最优雅啊!Top
25 楼ksndyjs()回复于 2005-06-20 11:54:49 得分 0
char* fun(char* p,char q,int x)
{
int n=0;
while(*p)
{
if(q == *p)
{
if(n++ == x)
return p;
}
++p
}
return NULL;
}Top
26 楼csgo(第一次)回复于 2005-06-20 11:55:59 得分 0
为什么还要写算法,标准模板库调用现成的不就行了,还要那么麻烦干什么?Top
27 楼ksndyjs()回复于 2005-06-20 11:59:13 得分 0
递归有什么用,字符串本身又没变。
当然还是要倒置了。Top
28 楼ksndyjs()回复于 2005-06-20 11:59:45 得分 0
顺便问一句楼主,你去哪个华为面试的啊。华为现在不是不招人了吗Top
29 楼liem(阿明)回复于 2005-06-20 12:55:04 得分 0
2) char * func(char *p,char q,int x)
{
int count=0;
while(*p&&t<x)
{
if(*p==q) count++;
if(count<x)
p++;
}
return p;
}Top
30 楼brianlu(-)回复于 2005-06-20 14:22:42 得分 0
华为就他妈那么无聊,就考点垃圾题目。
去那里干吗呢?还是不要去的好。
华为很垃圾,从考题可以看出。Top
31 楼liuy21()回复于 2005-06-20 14:43:01 得分 0
进去干什么呢?Top
32 楼CSDNWW(中国软件WW)回复于 2005-06-20 15:50:00 得分 0
2) char * func(char *p,char q,int x)
{
if (x == 0)
return NULL;
.....
.....
}Top
33 楼zsh6709(世界上没有后悔药吃的!!!)回复于 2005-06-20 16:22:06 得分 0
#include<string>
#include<iostream>
using namespace std;
char* fun( char* p, char q, int x )
{
if(p == NULL)
return NULL;
unsigned int uiCount(0);
char c;
while((c = *p++) != '\0')
if(c == q)
{
++uiCount;
if(uiCount==x)
return --p;
}
return NULL;
}
void main()
{
string s;
char a;
int b;
cout<<"请输入字符串:"<<endl;
cin>>s;
cout<<"请输入字符串中的一个字符:"<<endl;
cin>>a;
cout<<"请输入出现该字符串的个数:"<<endl;
fun(s,a,b);
}
那我做的第2题,为什么有错误?
这个错误如何改动呢?Top
34 楼CSDNWW(中国软件WW)回复于 2005-06-20 16:22:49 得分 0
(1)
#include <stdio.h>
#include<iostream>
using namespace std;
void FormatStr(std::string &str)
{
char c;
int len = strlen(str.c_str());
for(int i = 0; i < (len /2); i++)
{
c= str[i];
str[i] = str[len - i -1];
str[len - i - 1] = c;
}
}
main()
{
std::string s1 ="abcdefghijklmnopqrstuvwxyz";
FormatStr(s1);
cout<<s1.c_str()<<endl;
getchar();
}
Top
35 楼FAICHEN(CC)回复于 2005-06-20 17:01:52 得分 0
第一题是微软的出的题目拉
原题是不能调用系统函数,考虑最小的分配空间,写出这个算法~
应用堆栈的写法,肯定不会被认可,10个程序员,有9个都会写~Top
36 楼ksrs(良子)回复于 2005-06-20 19:16:23 得分 0
不是吧,大哥,这样的问题用来面试?
Top
37 楼smltiger(罗小虎)回复于 2005-06-20 19:35:58 得分 0
晕,不是吧,这是C的基础题啊,根本不需要用到C++知识呵呵
我只做第一题,呵呵
char s[]="abcdefg";
char s1[8];
for(i = strlen(s)-1; i >= 0; i++)
s1[7-i+1] = s[i];
s[7] = 0;
QQ:28286880Top
38 楼niefuhua(阳光)回复于 2005-06-21 06:02:20 得分 0
upTop
39 楼bobobie(波波)回复于 2005-08-24 13:20:59 得分 0
markTop




