st!=NULL && fast->next!=NULL)
{
low=low->next;
fast=fast->next->next;
if(low==fast) return true;
}
return false;
}
74.不使用库函数,编写函数int strcmp(char *source, char *dest)相等返回0,不等返回-1
int StrCmp(char *source, char *dest)
{
assert(source !=NULL) ;
assert(dest!=NULL) ;
while(*source= =*dest&&*source&&*dest)
{
source++;
dest++;
}
return (*source!=*dest) -1:0;
}
75.写一个函数,实现将一个字符串中的’\t’替换成四个’*’, ’\t’个数不定。如char *p=”ht\thdsf\t\ttt\tfds dfsw\t ew\t”,替换后p=”ht****hdsf********tt****fds dfsw**** ew****”。
char *Replace(char *Sorce)
{
char *pTemp=Sorce;
int iCount=0;
int iSizeOfSorce=0;
while(*pTemp!=’\0′)
{
if(‘\t’==*pTemp)
iCount++;
pTemp++;
}
iSizeOfSorce=pTemp-Sorce;
char *pNewStr=new char[iSizeOfSorce+3*iCount*sizeof(char)+1];
char *pTempNewStr=pNewStr;
pTemp=Sorce;
while(*pTemp!=’\0′)
{
if(‘\t’==*pTemp)
{
for(int iLoop=0; iLoop<4; iLoop++)
{
*pTempNewStr=’*';
pTempNewStr++;
}
pTemp++;
}
else
{
*pTempNewStr=*pTemp;
pTemp++;
pTempNewStr++;
}
}
*pTempNewStr=’\0′;
return pNewStr;
}
76.写一函数实现将一个字符串中的数字字符全部去掉。
void RemoveNum(char strSrc[])
{
char *p=strSrc;
char *q;
while(*p!=’\0′)
{
if(*p>=’0′&&*p<=’9′)
{
q=p;
while(*q!=’\0′)
{
*q=*(q+1);
q++;
}
}
else
{
p++;
}
}
}
77、链表节点结构如下:
struct STUDENT
{
long num;
float score;
STUDENT *pNext;
};
编写实现将两棵有序(按学号从小到大)的链表合并的函数,要求合并后的链表有序(按学号从小到大)
STUDENT *EmergeList(STUDENT *pHead1,STUDENT *pHead2)
{
//取小者为表头
STUDENT * pHead;
STUDENT *p1;
STUDENT *p2;
STUDENT *pCur;
STUDENT *pTemp;
if (pHead1->num<= pHead2->num)
{
pHead = pHead1;
p2 = pHead2;
p1=pHead1->pNext;
}
else
{
pHead = pHead2;
p1 = pHead1;
p2=pHead2->pNext;
}
pCur=pHead;
while(p1!=NULL&&p2!=NULL)
{
if(p2->numnum)
{
pCur->pNext=p2;
p2=p2->pNext;
pCur=pCur->pNext;
}
else if(p2->num>p1->num)
{
pCur->pNext=p1;
p1=p1->pNext;
pCur=pCur->pNext;
}
else if(p2->num==p1->num)
{
pCur->pNext=p1;
p1=p1->pNext;
pCur=pCur->pNext;
pTemp= p2;
p2=p2->pNext;
delete pTemp;
pTemp = NULL;
}
}
if(NULL==p1)
{
pCur->pNext=p2;
}
else if(NULL==p2)
{
pCur->pNext=p1;
}
return pHead;
}
78、封装CMyString类,要求声明和实现分开,声明见MyString.h,该类的声明可以添加内容,完成STLTest文件夹下main文件的要求。
参见STLTest Answer文件夹
79.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。
80.请你详细地解释一下IP协议的定义,在哪个层上面?主要有什么作用?TCP与UDP呢?
81.请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?
82.请问C++的类和C里面的struct有什么区别?
83.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
84. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等
a. class B : public A { ……} // B公有继承自A,可以是间接继承的
b. class B { operator A( ); } // B实现了隐式转化为A的转化
c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
85. 以下代码中的两个sizeof用法有问题吗?[C易]
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i
if( ‘a’<=str[i] && str[i]<=’z’ )
str[i] -= (‘a’-'A’ );
}
char str[] = “aBcDe”;
cout << “str字符长度为: ” << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
86. 以下代码有什么问题?[C难]
void char2Hex( char c ) // 将字符以16进制表示
{
char ch = c/0×10 + ’0′; if( ch > ’9′ ) ch += (‘A’-’9′-1);
char cl = c%0×10 + ’0′; if( cl > ’9′ ) cl += (‘A’-’9′-1);
cout << ch << cl << ‘ ‘;
}
char str[] = “I love 中国”;
for( size_t i=0; i
char2Hex( str[i] );
cout << endl;
87. 以下代码有什么问题?[C++易]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
88. 以下代码有什么问题?