1.若串S=′software′,其子串的数目是:
字串: n(n+1)/2 + 1
非空子串:n(n+1)/2
非空真子串:n(n+1)/2 - 1
2. 不能所字符串“Good!”存放到数组 s 中的代码是:
char s[8]; s = "Good!";s是个数组名,是常量,不可以被赋值,正确的写法应该是
char *s;s="good!";
3.char
s1[]=
"12345"
,*s2=
"1234";
printf(
"%d\n"
,strlen(strcpy(s1,s2)));
strcpy(s1,s2)这个函数是把s2字符串拷贝到s1这个字符串,同时也把s2的 '\0' 拷过去,所以覆盖了s1的所有字符(在空间足够的情况下,当然遇到s1的空间不足以存放s2,另考虑),所以strcpy执行完后是“1234” strlen("1234") 就是4了
4.字符串通常采用的两种存储方式是?
字符串的两种最基本的存储方式是顺序存储方式和链接存储方式
解释:顺序存储和链式存储时两种最基本的存储结构,字符串通常采用顺序存储,但是字符串较长而没有那么大的连续空间时,可以把一个字符串分成多个小串,串与串之间采用链式存储
5.某字符串满足:concat(head(s),head(tail(tail(s))))="ac",(head,tail的定义同广义表),则S=(accc)
广义标的head tail 概念 :head是字符串中的第一个字符。tail是除了第一个字符串剩下的所有字符,如果字符串只有一个字符,那么tail为空
6.假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)
2*4+3*4+4*3+6*3+7*3+15*1=86
1011.
7.有如下程序段:
1 2 3 4 5 |
|
则程序输出:
char
a[] =
"xyz"
, b[] = {
'x'
,
'y'
,
'z'
};
a容易理解,
strlen
(a)=3;
b是数组,元素在内存中是连续存储的,而
strlen
函数求字符串长度是要以
'\0'
结尾,但是b没有
'\0'
,
strlen
的内部函数指针会一直向后搜索,直至找到
'\0'
,内存中的其他区域也是有数据的,只是没有意义,
所以,
strlen
的指针最后指到哪里无法确定,但是结果肯定大于等于3.
8.利用fseek函数可以实现的操作是:
1.改变文件的位置 2.指针文件的顺序读写 3.文件的随机读写
9. 7&3+12的值是15。请问这句话的说法是正确的吗?
+优先于&
10. 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为:
先父母,再客人,后自己。