C primer Plus 编程练习P11

1.   设计并测试一个函数,从输入中获取下 n 个字符(包括空白、制
表符、换行符),把结果储存在一个数组里,它的地址被传递作为一
个参数。
#include <stdio.h>
#include <ctype.h>
#define SIZE 100
void get_nwords(char *arr, int n);
int main()
{
	int n;												//指定获取n个字符 
	char arr[SIZE];
	printf("How many character do you want: \n");
	scanf("%d",&n);
	getchar();											//从缓冲区取走scanf的换行符并丢弃 
	gets(arr);											//获取输入,存入arr数组 
	get_nwords(arr,n);									//处理arr数组的内容,使其只保留n个字符 
	puts(arr);											//输出处理之后的arr数组内容 
	return 0;
}

void get_nwords(char *arr, int n)
{
	
	while(n<SIZE)										//将从n开始之后的数组内容全部替换成空字符 
	{
		*(arr+n)='\0';							
		n++;
	}
}

2. 修改并编程练习 1 的函数,在 n 个字符后停止,或在读到第 1 个空
白、制表符或换行符时停止,哪个先遇到哪个停止。不能只使用
scanf()
#include <stdio.h>
#include <ctype.h>
#define SIZE 100
void get_nwords(char *arr, int n);
int main()
{
	int n;												//指定获取n个字符 
	char arr[SIZE];
	printf("How many character do you want: \n");
	scanf("%d",&n);
    printf("please input strings"\n);
	getchar();											//从缓冲区取走scanf的换行符并丢弃 
	gets(arr);											//获取输入,存入arr数组 
	get_nwords(arr,n);									//处理arr数组的内容,使其只保留n个字符 
	puts(arr);											//输出处理之后的arr数组内容 
	return 0;
}

void get_nwords(char *arr, int n)
{
	int i, j=0;

	for(i = 0; i < n; i++)             //判断从第一个输入字符到指定的第n个字符
	{
		if(isspace(*(arr + i)))         //如果arr为空格,则把当前位置以后所有字符置为空字符
		{
			*(arr + i) = '\0';
			break;                    // 跳出循环,当前位置为arr+i,在第n个字符以前
		}
		
	}
	if(i=n)	     //上面代码执行完说明在第n个字符以前没有遇到空字符,执行条件二,第n个字符后置0
	{
		while(i<SIZE)
		{
			*(arr + i) = '\0'; 
			i++;
		}
	}

}
3. 设计并测试一个函数,从一行输入中把一个单词读入一个数组
中,并丢弃输入行中的其余字符。该函数应该跳过第 1 个非空白字符前
面的所有空白。将一个单词定义为没有空白、制表符或换行符的字符
序列。
#include<stdio.h>
#include<ctype.h>			//需要用到isspace 
#define SIZE 100 
void getwords(char *str);
int main()
{
	char str[SIZE];
	printf("Please input strings\n");
	 gets(str);
	 getwords(str);			//该函数获取第一个单词 
	 puts(str);
	 return 0;
}

void getwords(char *str)
{
	char *ch=str;				
	while(!isspace(*ch++));			//如果ch为非空,isspace返回0,取反为真,则*ch++(找下一个字符)
									//如果ch为空,isspace返回1,取反为假,则结束循环 
	
	str[ch-str] = '\0';				//此时ch位置为空字符的位置,将该数组元素值置为\0 
}
	
4. 设计并测试一个函数,它类似编程练习 3 的描述,只不过它接受
2 个参数指明可读取的最大字符数。
#include<stdio.h>
#include<ctype.h>			//需要用到isspace 
#define SIZE 100 
void getwords(char *str,int n);
int main()
{
	char str[SIZE];
	int n;
	printf("please enter characeter you need: ");
	scanf("%d",&n);
	getchar();
	printf("Please input strings\n");
	 gets(str);
	 getwords(str, n);			//该函数获取第一个单词 
	 puts(str);
	 return 0;
}

void getwords(char *str, int n)
{
	char *ch=str;
	int i=1;			
		while(!isspace(*ch++) && i<n)				
		{
			i++;
		}
											
									//如果ch为非空,isspace返回0,取反为真,则*ch++(找下一个字符)
									//如果ch为空,isspace返回1,取反为假,则结束循环 	
									//计数变量i与指定读取最大字符n比较,如果while条件一直为真,达到第n个字符退出 
	
	str[ch-str] = '\0';				//此
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值