C Primer Plus 11.12 复习题

1、

答:字符串是以空字符('\0')结尾的一系列字符,故上述声明的是一个字符数组,不是字符串。

2、

3、

4、

5、

a.

b.

指向 char 类型的指针

c.

字符串 "Ho Ho Ho!" 的首地址。

d.

*--pc : 表示指针先前移动一位,然后取指针指向的值。

--*pc : 先取指针指向的值,然后值减1.

e.

f.

第 1 个 while 循环用来测试是否到达字符串末尾的空字符('\0') ;

第 2 个 do{}while 循环用来测试是否到达该字符串的首字符.

g.

由于 *pc 为空字符('\0'),不会进入第 1 个 while 循环,第二个 do{}while 循环先对 pc 递减,则表达式 pc - str 永远为负,循环一直进行下去。

h.

主调函数需调用pr()前要声明函数 char *pr(char *str);

主调函数需要声明指针 char 类型变量 x,即 char *x 。

6、

sign 是 char 类型变量,占 1 个字节的内存。

'$' 是 char 字面值常量,占 1 个字节的内存。

"$" 是字符串字面值,末尾还有空字符('\0'),占 2 个字节的内存。

7、

8、

9、

复制代码
char *s_gets(char *st, int n)
{
	
	char *ret_val;
	
	char *ptr;
	
	ret_val = fgets(st, n, stdin);
	
	if(ret_val)
	{
		
		ptr = st;
			
		while(*ptr != '\n' && *ptr != '\0')
			
			ptr++;
			
		if(*ptr == '\n')
		
			*ptr = '\0';
			
		else
		
			while(getchar() != '\n')
			
				continue;
						
	}
	
	return ret_val;
}

10、

复制代码
int strlen(char *st)
{
	int i = 0;
	
	while(*st++)
	
		i++;
	
	return i;
}

11、

复制代码
#include <string.h>  // 有 strchr() 函数

char *s_gets(char *st, int n)
{
	char *ret_val;
	
	char *find;

	ret_val = fgets(st, n, stdin);
	
	if (ret_val)
	{
		
		find = strchr(st, '\n');
		
		if (find)
			
			*find = '\0';
		
		else
			
			while (getchar() != '\n')
				
				continue;
	}
	
	return ret_val;
}	

12、

复制代码
#include <stdio.h>

char *find_first_space(const char *str)
{
 
    if (str == NULL)
        
		return NULL;
    
    while (*str != '\0') 
	{
        if (*str == ' ') 
	
          	return (char *)str;
        
        str++;
    }
    

    return NULL;
}


/*

括号 (char *) 是 C 语言类型转换操作符的固定语法格式。它告诉编译器:"将 str 从 const char * 类型转换为 char * 类型"。

*/

13、

复制代码
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define ANSWER "Grant"
#define SIZE 40

char *s_gets(char *st, int n);

void upper(char *str);

int main()
{
	char try[SIZE];

	puts("Who is buried in Grant's tomb?");
	
	s_gets(try, SIZE);
	
	upper(try);
	
	while(strcmp(try, ANSWER) != 0)
	{
		
		puts("No, that's wrong. Try again.");
		
		s_gets(try, SIZE);
		
		upper(try);
	
	}
	
	puts("That's right);

	return 0;
}

char *s_gets(char *st, int n)
{
	char *ret_val;
	
	char *find;

	ret_val = fgets(st, n, stdin);
	
	if (ret_val)
	{
		
		find = strchr(st, '\n');
		
		if(find)
		
			*find = '\0';
		
		else
		
			while(getchar() != '\n')
		
				continue;
	}
	
	return ret_val;
}

void upper(char *str)
{
	while(*str)
	{
		*str = toupper(*str);
		
		++str;
	}
}	
相关推荐
Wpa.wk1 分钟前
接口自动化测试 - 请求构造和响应断言 -Rest-assure
开发语言·python·测试工具·接口自动化
czhc114007566310 分钟前
协议 25
java·开发语言·算法
ae_zr15 分钟前
QT动态编译应用后,如何快速获取依赖
开发语言·qt
gjxDaniel17 分钟前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
晓131337 分钟前
第二章 【C语言篇:入门】 C 语言基础入门
c语言·算法
jiang_changsheng38 分钟前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
yong99901 小时前
MATLAB面波频散曲线反演程序
开发语言·算法·matlab
LeoZY_1 小时前
开源项目精选:Dear ImGui —— 轻量高效的 C++ 即时模式 GUI 框架
开发语言·c++·ui·开源·开源软件
Fightting881 小时前
Tkinter Button bind hover message
开发语言·python
qq_336313931 小时前
javaweb-web基础(springboot入门)
java·开发语言·mysql