nullLesson 10
字符串与字符指针Lesson 10
字符串与字符指针mtysoft@163.comASCII码ASCII码'A' = 65'a' = 97' ' = 32'0' = 48常见字符
的ASCII码整型与字符型整型与字符型黄建语录四:整型和字符型通用。[2007.4]已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,以下不能将变量c中大写字母转换为对应小写字母的语句是
A)c = (c - 'A') % 26 + 'a'
B)c = c + 32
C)c = c - 'A' + 'a'
D)c = ('A' + c) % 26 - 'a'习题演练习题演练[2009.9.23]'A'的ASCII码为65,则程序输出
char c1, c2;
c1 = 'A' + '8' - '4';
c2 = 'A' + '8' - '5';
printf("%c,%d\n", c1, c2);[2005.4.16]'0'的ASCII值为48,则程序输出
char a = '1', b = '2';
printf("%c,", b++);
printf("%d", b - a);2,2E,68转义字符转义字符字符数组与串2-1字符数组与串2-1char sa[ ] = {'N','B','A'};'N''B''A'sa201char sb[ ] = "NBA";'N''B''A''\0'sb201334字符数组与串2-2字符数组与串2-2'N''B''A'sa201'N''B''A''\0'sb2013char sa[ ] = {'N','B','A','\0'};char sb[ ] = "NBA";44'\0'3null区分'0'与'\0'习题演练2-1习题演练2-1[2008.9.18]以下程序运行后,w的值是
int w = 'A';
char x = '0', y = '\0';
w = ((x || y) && (w < 'a'));[2008.9.13]以下不能作为C合法常量的是
A)'cd' B)0.1e+6 C)"\a" D)"\011"1[2006.9.24]以下选项中,值为1的
达式是
A)1 - '0' B)1 - '\0'
C)'1' - 0 D)'\0' - '0'习题演练2-2习题演练2-2[2005.4.25]以下能正确定义一维数组的选项是
A)int a[5] = {0,1,2,3,4,5};
B)int a[5] = "0123";
C)char a = {'A','B','C'};
D)char a[ ] = {0,1,2,3,4,5};[2005.4.27]若已有定义:char a[ ] = "xyz", b[ ] = {'x','y','z'};则以下选项正确的是
A)数组a和b的长度相同 B)a数组长度小于b
C)a数组长度大于b D)上述说法都不对字符串函数字符串函数输出字符串输出字符串'N''B''A'sa201'\0'3char sa[4] = "NBA";
for (i = 0; i < 3; i++)
printf("%c", sa[i]); NBAprintf("%s", sa);NBAputs(sa);NBA习题演练习题演练char sa[7] = "ABC\0TV";ABCputs(sa+1);'A''B''C'sa'\0''T''V''\0'2013546printf("%s", sa+4);printf("%s", sa);BCTV字符串函数字符串函数gets与scanfgets与scanf函数读取字符串,直至遇到换行符为止,然后把换行符替换为空字符'\0'。函数遇到空格或换行符时输入结束,输入有空格的字符串时,须用gets。gets函数3-1gets函数3-1[例]若运行时输入:AB CD<回车>AB CD<回车>,则以下程序运行结果是
char st1[80], st2[80];
gets(st1);
scanf("%s", st2);
puts(st1); puts(st2);AB CD
AB[2004.4.35]有以下定义:char a[10], *p = a;
不能给数组a输入字符串的语句是
A)gets(a); B)gets(a[0]);
C)gets(&a[0]); D)gets(p);gets函数3-2gets函数3-2[2006.4.17]若要求从键盘读入含有空格字符的字符串,应使用函数
A)getc() B)gets()
C)getchar() D)scanf()[2009.9.31]以下叙述中错误的是
A)不可以用赋值语句给字符数组名赋字符串
B)可以用输入语句把字符串整体输入给字符数组
C)字符数组中的内容不一定是字符串
D)字符数组只能存放字符串gets函数3-3gets函数3-3[2003.9.19]填空实现程序功能:将字符串s中的数字字符放入数组a中,并输出。例如,输入字符串:abc123edf456gh,则输出:123456。 char s[80], a[80]; int i, j = 0;
gets(s);
for (i = 0; s[i] != '\0'; i++)
if (_______________________)
a[j++] = s[i];
a[j] = '\0';
puts(a);s[i]>='0' && s[i]<='9'字符串函数字符串函数字符串长度字符串长度'N''B''A'sa201'\0'3char sa[4] = "NBA";int k = strlen(sa);3printf("%d", k);strlen与sizeofstrlen与sizeof'N''B''A'sa201'\0'3char sa[4] = "NBA";int k = strlen(sa), v = sizeof(sa);k = 3, v = 4printf("k = %d, v = %d", k, v);strlen函数4-1strlen函数4-1char sa[7] = "ABC\0TV";3,printf("%d,", strlen(sa+1));'A''B''C'sa'\0''T''V''\0'2013546printf("%d,", strlen(sa+4));printf("%d,", strlen(sa));2,2,printf("%d,", sizeof(sa));7,strlen函数4-2strlen函数4-2[2004.4.31]以下程序的运行结果是
char a[ ] = "abcdefg", b[10] = "abcdefg";
printf("%d,%d", sizeof(a), sizeof(b));8,10[2005.4.24]以下程序的运行结果是
char a[7] = "a0\0a0\0";
printf("%d,%d", sizeof(a), strlen(a));7,2[2007.4.12]以下程序的运行结果是
char a[ ] = {'\1','\2','\3','\4','\0'};
printf("%d,%d", sizeof(a), strlen(a));5,4strlen函数4-3strlen函数4-3[2007.4.10]以下程序的运行结果是
printf("%d", strlen("IBM\n012\1\\"));[2010.3.31]以下程序的运行结果是
char s1[10] = "abcd!", *s2 = "\n123\\";
printf("%d,%d", strlen(s1), strlen(s2));95,5[2010.9.23]以下程序的运行结果是
char x[ ] = "STRING";
x[0] = 0; x[1] = '\0'; x[2] = '0';
printf("%d,%d", sizeof(x), strlen(x));7,0strlen函数4-4strlen函数4-4[例]char sa[ ]={'a','b'}, sb[10]={'a','b'};
printf("%d,%d", strlen(sa), strlen(sb));
A)在给sa和sb数组置初值时,系统会自动添加字符串结束符,故输出的长度都为2
B)由于sa数组中没有字符串结束符,长度不能确定;但sb数组中字符串长度为2
C)由于sb数组中没有字符串结束符,长度不能确定;但sa数组中字符串长度为2
D)由于sa和sb数组中都没有字符串结束符,故长度都不能确定字符串函数字符串函数字符串拷贝3-1字符串拷贝3-1'N''B''A'sa201'\0'3char sa[4] = "NBA", sb[4];strcpy(sb, sa);printf("sa = %s, sb = %s", sa, sb);'N''B''A'sb'\0'字符串拷贝3-2字符串拷贝3-2'N''B''A'sa201'\0'3char sa[4] = "NBA", sb[4];strcpy(sb, "YOU");printf("sa = %s, sb = %s", sa, sb);'Y''O''U'sb'\0'字符串拷贝3-3字符串拷贝3-3'm''e''\0'sachar sa[3] = "me", sb[5] = "LOVE";strcpy(sb, sa);'L''O''V'sb'E''\0'201'm''e''\0'sa = me, sb = mestrcpy函数2-1strcpy函数2-1char sa[7] = "ABC\0TV", sb[7];strcpy(sb+2, sa+4);'A''B''C'sa'\0''T''V''\0'2013546strcpy(sb, sa);'A''B''C'sb'\0''T''V''\0'strcpy(sb+strlen(sb), sa+1);'B''C''\0'strcpy函数2-2strcpy函数2-2[2005.3.15]以下程序的运行结果是
char s[ ] = "abc", t[3][4];
for (i=0; i<3; i++) strcpy(t[i], s);
for (i=0; i<3; i++) puts(&t[i][i]);[2006.9.39]有定义:char *p = "abcdefghi"; 以下选项中正确运用了strcpy函数的是
A)char s[10]; strcpy(s, p[4]);
B)char s[10]; strcpy(++s, &p[1]);
C)char s[10], *w; strcpy(w=s+5, p);
D)char s[10], *w; strcpy(w=s+1, p+1);abc
bc
c字符串函数字符串函数字符串连接字符串连接'm''e''\0'sa'L''O''V'sb'E''\0'201'm''e''\0'sa = me, sb = LOVEmechar sa[3] = "me", sb[7] = "LOVE";strcat(sb, sa);strcat函数3-1strcat函数3-1'm''e''\0'sachar sa[3] = "me", sb[7] = "LOVE";strcpy(sb + strlen(sb), sa);'L''O''V'sb'E''\0'201'm''e''\0'sa = me, sb = LOVEmestrcat函数3-2strcat函数3-2[2007.4.37]以下程序的运行结果是
char p[20] = {'a','b','c','d'};
char q[ ] = "abc", r[ ] = "abcde";
strcpy(p + strlen(q), r); strcat(p, q);
printf("%d%d", sizeof(p), strlen(p));2011[2007.4.38]以下程序的运行结果是
char p[20] = {'a','b','c','d'};
char q[ ] = "abc", r[ ] = "abcde";
strcat(p, r); strcpy(p + strlen(q), q);
printf("%d%d", sizeof(p), strlen(p));206strcat函数3-3strcat函数3-3[2001.4.43]程序运行时,输入:ABC,则输出
char s[10] = "1,2,3,4,5";
gets(s);
strcat(s, "6789");
printf("%s", s);ABC6789[2010.9.33]以下程序的运行结果是
char a[20] = "ABCD\0EFG\0";
char b[ ] = "IJK";
strcat(a, b);
printf("%s", a);ABCDIJK字符串函数字符串函数字符串比较字符串比较int a, b, c, d, e, f;
char sa[4] = "ATM", sb[8] = "ATM";b = strcmp("ATM", "ABCD");c = strcmp("ATM", "ATM");d = strcmp("ATM ", "ATM");e = strcmp("ABCD", "abcd");f = strcmp(sa, sb);a = strcmp("ABCD", "ATM");a = -1b = 1c = 0d = 1e = -1f = 0习题演练2-1习题演练2-1[例]以下程序的运行结果是
char sa[8] = "MATCH", sb[6] = "MVP";
char sc[8] = "MVP", *p = sc;
printf("%d,", strcmp(sa, sb));
printf("%d,", strcmp(sb, sc));
if (sb==sc) printf("sb和sc地址相同,");
else printf("sb和sc地址不同,");
if (p==sc) printf("p和sc地址相同");
else printf("p和sc地址不同");-1,0,sb和sc地址不同,p和sc地址相同习题演练2-2习题演练2-2[2004.9.31]能实现当s1串大于s2时执行S的是
A)if (s1 > s2) S;
B)if (strcmp(s1, s2)) S;
C)if (strcmp(s2, s1) > 0) S;
D)if (strcmp(s1, s2) > 0) S;[2010.9.31]下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是
A)if (strcmp(s2, s1) == 0) ST;
B)if (s1 == s2) ST;
C)if (strcpy(s1, s2) == 1) ST;
D)if (s1-s2 == 0) ST;区分'A'与"A"区分'A'与"A"'A'"A"与null字符数组与指针6-1字符数组与指针6-1char s[4] = "BOY", *p;
p = s;
*p = 'D';
p++;
*p = 'I';
printf("%s", s);1996
2000
2001
2002
2003??20002001'B''O''Y''\0''I''D' p
s[0]
s[1]
s[2]
s[3]栈DIY字符数组与指针6-2字符数组与指针6-2char s[4] = "BOY";
char *p = "BOY";
s[1] = 'M';
s[2] = 'W';7000'B''O''Y''\0''M'p栈'W''B''O''Y''\0'7000
7001
7002
7003s[0]
s[1]
s[2]
s[3]堆字符数组与指针6-3字符数组与指针6-3char s[4], *p;
strcpy(s, "BOY");
p = "BOY";??????p栈'B''O''Y''\0'7000
7001
7002
7003s[0]
s[1]
s[2]
s[3]堆1996
2000
2001
2002
2003'B''O''Y''\0'7000字符数组与指针6-4字符数组与指针6-41996
2000
2001
2002
2003char s[4], *p;??????p栈'B''O''Y''\0'7000
7001
7002
7003s[0]
s[1]
s[2]
s[3]堆字符数组与指针6-5字符数组与指针6-5char s[4], *p;
p = s;
strcpy(p, "BOY");??????p栈'B''O''Y''\0'7000
7001
7002
7003s[0]
s[1]
s[2]
s[3]堆2000
2001
2002
2003'B''O''Y''\0'2000字符数组与指针6-6字符数组与指针6-6正确:
char s[3] = "me";
char s[3] = {"me"};
char s[ ] =
{'m','e','\0'};
char s[3];
strcpy(s,"me");
错误:
char s[3];
s = "me";正确:
char *p = "me";
char *p = {"me"};
char *p; p = "me";
char s[3], *p = s;
strcpy(p,"me");
错误:
char *p; *p = "me"; char *p;
strcpy(p,"me");字符数组与指针3-1字符数组与指针3-1[2010.3.23]以下能正确进行字符串赋值的是
A)char *s; s = "Olympic";
B)char s[8]; s = "Olympic";
C)char *s; s = {"Olympic"};
D)char s[8]; s = {"Olympic"};[2005.4.39]以下能正确进行字符串赋值的是
A)char *p; *p = "right!";
B)char s[10]; s = "right!";
C)char s[10]; *s = "right!";
D)char *p = "right!";字符数组与指针3-2字符数组与指针3-2[2004.4.44]以下错误的程序段是
A)char s[6] = "abcd";
B)char t[ ] = "abcd", *s = t;
C)char s[6]; s = "abcd";
D)char s[6]; strcpy(s, "abcd");[例]以下能正确进行字符串赋值的是
A)char st[4] = "Good";
B)char st[5]; st[0] = 'G';
C)char *st; *st = "Good";
D)char st[5] = {'G','o','o','d'};字符数组与指针3-3字符数组与指针3-3[2009.9.37]若有:char *p;则选项中正确的是
A)char st[ ] = "string"; p = st;
B)scanf("%s", p);
C)p = getchar();
D)*p = "string";[2006.4.15]以下能正确进行字符串赋值的是
A)char st[ ] = {'\064'};
B)char st = "kx43";
C)char st = '';
D)char st[ ] = "\0";本课小结本课小结字符数组与字符指针ASCII 码与转义字符字符串函数'0'与'\0''A'与"A"课后题:大小写转换课后题:大小写转换请编写函数fun,它的功能是:将s所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
void fun(char *s)
{
}