字符串

例:下面 是‘ abcd321ABCD ’的子串。D
A.abcd
B.321ab
C.‘abc ABC’
D.‘21AB’

  1. 串中任意个连续的字符组成的子序列称为该串的子串。
  2. 空串和本身都算做本字符串的字串。

将两个字符串连接起来组成一个字符串时,选用( )函数。
A.strlen()
B.strcap()
C.strcat()
D.strcmp()

  1. strcat()字符串连接字符
  2. strcmp()字符串大小比较

赋值

不能把字符串”HELLO!”赋给数组b的语句是()
A.char b[10]={‘H’,’E’,’L’,’L’,’O’,’!’,’’};
B.char b[10];b=”HELLO!”;
C.char b[10];strcpy(b,”HELLO!”);
D.char b[10]=”HELLO!”;

字符数组初始化有两种方法:
一种是逐个字符赋值,另一种是用字符常量对整个数组赋值。

A是第一种,D是第二种。显然第一种比第二种繁琐复杂。

选项B并没有将数组b赋值为 hello! 因子b是数组的首地址,b=”HELLO!”;是改变了这个指针的指向,是错误的。

C是字符串拷贝函数。
函数格式: char strcpy (char s1, const char *s2);
功能: 将S2所指的字符串拷贝到S1所指的字符串中。
说明:
(1)参数S1S2都是指向字符串的指针。S1可以是字符数组名或字符指针,但不能是字符型常量,S2可以是字符串常量、字符数组或字符指针。
(2)将S2所指的字符串拷贝到S1所指的字符串中,用赋值语句S1=S2;是不行的,赋值语句要求左边是左值,S1是常量。 (3)要保证S1的长度足够大,以便能容纳下S2所指的字符串,否则引起错误。 C 对于非strtic型数组不初始化,其元素值不能确定。对strtic数组元素不赋初值,系统会自动赋以0值。(参考)

安全值?

判断下述语句的对错:MFC中CString是类型安全的类。(对)

  1. 类型安全就是说,如果两个类型直接要相互转换,必须要显示的转换,不能偷偷摸摸的只用一个等于号就隐式转换了。

  2. MFC数据类型转换标准库std的string 和MFC类库CString之间可以通过CString的format方法进行转换

  3. 类型安全不是一种类型,是有关类型操作一种规范。

如:不让不同类型的数据相互转换
int Num =3;
string Str=”3”;
Num =Str; //错
Num=int.Parse(Str);//对
类型安全要求可以相互转换的不同类型数据在转换时 显式转换

字符串倒序

请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

int ()
{
char *src = "hello,world";
char *dest = NULL;
int len = strlen(src);
dest = (char *)malloc(len);
char *d = dest;
char *s = src[len];
while (len-- != 0)
*d++ = *s--;
printf("%s", dest);
return 0;

}
  1. 第7行要为’’分配一个空间
  2. 第9行改成char * s = &src[len-1]
  3. 第12行前要加上*d = ‘’
  4. 第13行前要加上free(dest)释放空间

方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int ()
{
char *src = "hello,world";
int len = strlen(src);
char *dest = (char *)malloc(len + 1);
char *d = dest;
char *s = &src[len - 1]; //指向最后一个字符
while ( len-- != 0 )
*d++ = *s--;
*d = 0; //尾部要加
printf("%sn", dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}

方法二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int ()
{
char str[] = "hello,world";
int len = strlen(str);
char t;
for (int i = 0; i < len; i++)
{
t = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = t;
}
printf("%s", str);
return 0;
}