工作中碰到一些技术问题,很难搞定,公司里的人都不会,只能来这里向高手请教了

pubsubsub 2009-01-04 09:30:02
都是关于C/C++的

问题1:一个函数 void func(char* str),只有一个参数str,如何判断str是以\0结尾的? 意思是,传进来的字符串str可能不是以\0结尾的,函数func要能处理这种情况。

问题2:一个算法问题,有两个字符串,str1,str2,删除两个字符串中相同的字符,例如str1="abcde",str2="tbbhhy",算法执行后,str1="acde",str2="thhy",这个算法如何实现?

问题3:在一个头文件中定义了一个宏,例如:#define MAX(A,B) ((A) > (B) : (A) ? (B)),在另外一个头文件中叶定义了一个同名的宏MAX。在一个C文件中同时include这两个头文件,当我在一个函数中调用MAX宏时,我怎么知道调用的是哪个宏?

问题4:单例模式一般这样写:
class A
{
private:
A();
static A a;
public:
static A GetInstance();
};

函数GetInstance实现时为:
A A::GetInstance()
{
if (a == NULL)
a = new A();

return a;
}
问题是:如果在多线程环境下,可能两个线程同时调用GetInstance,如何防止a只被创建一次,我知道要加锁,可怎么加锁才能保证高效。

大概这些吧,直到正确答案的兄弟帮帮忙,给解决一下,多谢了!
...全文
245 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
帖子不能编辑 2009-01-30
  • 打赏
  • 举报
回复
鉴于你的结贴率,我就尝试回答你的问题。
(1)应该没有办法从函数内部来判断的。因为,问题在于,我给你的东西你都用错了。
(2)开两个存放26个字母的字符数组(这儿只考虑处理小写字母的情况)。第一个字符串映射到第一个数组,第二个字符串映射到第二个数组。然后在收集结果字符串即可。大概的代码如下,没有经过debug.

void func(char* str1,char* str2)
{
char strflag1[26];
char strflag2[26];
memset(strflag1,0,26);
memset(strflag2,0,26);

while(*str1 != '\0')
{
strflag1[*str1-'a']++;
str1++;
}
while(*str2 != '\0')
{
strflag2[*str2-'a']++;
str2++;
}

int chnum=0;

//收集第一个结果字符串
for(i=0; i<26; i++)
{
if(strflag2[i]==0)
{
chnum=strflag1[i];
while(chnum!= 0)
{
putchar(i);
chnum--;
}
}
}
putchar('\n');


//收集第二个结果字符串
{
if(strflag1[i]==0)
{
chnum=strflag2[i];
while(chnum!= 0)
{
putchar(i);
chnum--;
}
}
putchar('\n');
}


}


吃饭去了。
andy_youyou 2009-01-05
  • 打赏
  • 举报
回复
前三个问题C++primer中应该能找大答案
模式就不知道了 没弄过
WoMaJia 2009-01-05
  • 打赏
  • 举报
回复
到c++版问比较好
roadblossom 2009-01-05
  • 打赏
  • 举报
回复
ljooo 2009-01-05
  • 打赏
  • 举报
回复
1. void func(char* str ,char end)
2.复习《数据结构》里字符串的内容
3.头文件保护符或者全部用vc的 __max

696

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧