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'; //此