c primer plus编程练习第十一章(纯手打欢迎指错)

11.1

#include<stdio.h>
char *input(char*);
int main(void)
{
	char test[100];
	input(test);
	puts(test);
	
}
char *input(char *ptr)
{
	
	char ch;
	while((ch=getchar())!=EOF)
		*ptr++=ch;
		
	
}

11.2

#include<stdio.h>
#define LIMIT 7
char *input(char*);
int main(void)
{
	char test[100];
	input(test);
	puts(test);
	
}
char *input(char *ptr)
{
	
	char ch;
	int count=0;
	while(((ch=getchar())!=EOF)&&(ch!=' '&&ch!='\t'&&ch!='\n'&&count<LIMIT))   //遇到 空字符,空格,制表格,换行符,并且小于LIMIT时停止输入 
		{
		*ptr++=ch;
		count++;
	    }
	    *ptr='\0';
		
	
}

11.3

#include<stdio.h>
void input(char*);
void output(char*);
int main(void)
{
	char test[100];
	input(test);
	puts(test);
	puts(" ");
	output(test);
	
}
void input(char *ptr)
{
	char ch;
	while((ch=getchar())!=EOF)  
			*ptr++=ch;
}
void output(char*ptr)
{
	while(*ptr)
	{
		if(*ptr==' '||*ptr=='\n'||*ptr=='\t')
			break;	
	else
	putchar(*ptr);
	ptr++;	
}
	
	
}
11.4

#include<stdio.h>
char*strchr_n(char*,char);
int main(void)
{
	char test[100]="I have an apple ,do you like it ?";
	char ch;
	char*target;
	puts("Please enter a line");
	gets(test);
	puts("Enter a letter or punctution.");
	while((ch=getchar())!=EOF)
{
	target=strchr_n(test,ch);
	printf("%c 's address is %p\nand I will show you something:",ch,target);

	puts(target);
	while(getchar()!='\n')
	continue;
	
}
	
}
char*strchr_n(char*ptr,char pts)
{
	while(*ptr)
	{
		if(*ptr==pts)
		return ptr;
		
		else
		ptr++;
		}
	return NULL;
}

11.5

#include<stdio.h>
int is_within(char,char*);

int main(void)
{
	char ch;
	char test[100];
	int result;
	puts("Please enter a line.");
	gets(test);
	puts("Enter what you want to search.");
	while((ch=getchar())!=EOF)
	{
		result=is_within(ch,test);
		printf("result=%d\n",result);
		while((getchar())!='\n')
		continue;
	}
	
}
int is_within(char n,char*target)
{
	int count=0;
	while(*target)
	{
		if(*target==n)
		{
		count++;
		target++;
		}
		else
		target++;
	}
	
	return count;
}

11.6

#include<stdio.h>  //不知道这题有没有偏离题意 
int strncpy_n(char*,char*,int); 

int main(void)
{
	char source[100];
	char target[100];
	puts("Enter a line.");
	while(gets(source))
	{
		strncpy_n(target,source,5);
		puts(target);
		puts("Enter a line.");

	}
	
}
int strncpy_n(char*s1,char*s2,int n)
{
	int count;
	for(count=0;count<n;count++)
	{
		if(s2[count]=='\0')
		{
			s1[count]=s2[count];
			return s1;
		}
		else
		s1[count]=s2[count];
		
	}
	
}

11.8

#include<stdio.h>
#include<string.h>
char *back(char*);

int main(void)
{
	char test[100];
	
	
	while(printf("Please enter a line:")&&gets(test))
	   puts(back(test));
	
} 
char *back(char*s1)
{
	char s2[100];
	int i,j;
	
	for(i=strlen(s1)-1,j=0;i>=0,j<strlen(s1);i--,j++)
	  {
	  	s2[j]=s1[i];
	  }
	  s2[strlen(s1)]='\0';
	  return s2;
}
11.9

#include<stdio.h>
#define N 100// 这题参照了官方答案,基本一样啦
void d_space(char*);
int main(void)
{
	char test[N];
	while(printf("Please enter 9 mark:")&&gets(test)&&test[0]!='\0')
	{
		d_space(test);
		puts(test);
	}
	
	
}

void d_space(char*s1)
{
	int i=0;
	char *s2;
	while(*s1)
	{
		if(*s1==' ')
		{
		s2=s1;
		do{
			*s2=*(s2+1);
			s2++;
		}while(*s2);
	}
		else
		s1++;
	}
}
10.10

#include<stdio.h>  //代码有点难看,有点长。不足请指出
#include<string.h>
void output_r(char *[],int);
void output_l(char*s1[],int n);
void first_word(char*s1[],int n);
int main(void)
{
	char input[10][100];
	char *target[10];
	int count=0;
	while(count<10&&gets(input[count])!=NULL&&input[count][0]!='\0')
		{
			target[count]=input[count];
		      count++;
		}
	puts("Please enter a num of list.");
	puts("1.ԭʼÊä³ö¡£ 2.ASCII˳ÐòÊä³ö¡£ 3.³¤¶ÈµÝÔöÊä³ö¡£ 4.µÚÒ»¸öµ¥´Ê³¤¶ÈÊä³ö¡£ 5.Í˳ö¡£");
	int ch,i;
	while(ch=getchar())
	{
		switch(ch)
		{
		case '1':
			for(i=0;i<count;i++)
			puts(input[i]);
		break;
		case '2':
			output_r(target,count);
			for(i=0;i<count;i++)
			puts(target[i]);
			break;
		case '3':
			output_l(target,count);
			for(i=0;i<count;i++)
			puts(target[i]);
			break;
		case '4':
			first_word(target,count);
				for(i=0;i<count;i++)
			puts(target[i]);
			break;
		case '5':
			break;
		
		default :
			break;
			
	    }
	     if(ch=='5')
	    break;
	    if(ch<'1'||ch>'5')
	    break;
	    while(getchar()!='\n')
	    continue;
	}
	puts("Bye!");
	return 0;
} 
void output_r(char*s1[],int n)
{
	int i,j;
	char *temp;
	for(i=0;i<n-1;i++)
	   for(j=i+1;j<n;j++)
		if(strcmp(s1[i],s1[j])>0)
		{
		temp=s1[i];
		s1[i]=s1[j];
		s1[j]=temp;
		}
	
}
void output_l(char*s1[],int n)
{
	int i,j;
	char *temp;
	
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
			if(strlen(s1[i])>strlen(s1[j]))
			{
				temp=s1[i];
				s1[i]=s1[j];
				s1[j]=temp;
			}
			
		}
}
void first_word(char*s1[],int n)
{
	int i,j;
	char *temp;
	for(i=0;i<n;i++)
	{
		temp=strchr(s1[i],' ');
		if(temp)
		*temp='\0';
		
	}	
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		if(strlen(s1[i])>strlen(s1[j]))
		{
			temp=s1[i];
			s1[i]=s1[j];
			s1[j]=temp;
		}
	
	for(i=0;i<n;i++)
	{
		temp=strchr(s1[i],'\0');
		if(temp)
		*temp=' ';
		
	}
	
}
11.11

#include<stdio.h>
#include<stdbool.h>
#include<ctype.h>
int main(void)
{
	
	bool result=false;
	char ch;
	char*temp;

	int word=0,upper=0,lower=0,punct=0,digit=0;
	puts("Please enter a line.(EOF to quit)");
	while((ch=getchar())!=EOF)
	{
		temp=ch;
		temp++;
		if(isupper(ch))
		upper++;
		else if(islower(ch))
		lower++;
		else if(ispunct(ch))
		punct++;
		else if(isdigit(ch))
		digit++;
		
		if(isalnum(ch)&&result==false)
		{
			word++;
			result=true;
		}
		
		if(isspace(ch)&&result==true)
		    result=false;
		
		}
	printf("word=%d,upper=%d,lower=%d,punct=%d,digit=%d",word,upper,lower,punct,digit);
	
}
11.12

#include<stdio.h>
int main(int argc,char *argv[])
{
	int i;
	char *s1;
	for(i=argc-1;i>0;i--)
	printf("%s ",argv[i]);
	
	
}

11.13

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char *argv[])
{
double x=1;
int i;


	for(i=0;i<atoi(argv[2]);i++)
	  x*=atof(argv[1]);
	
	printf("%f \n",x);
}

11.14

#include<stdio.h>//这题也参考了别人的答案然后自己写的。
#include<ctype.h>
int atoi_n(char*);
int main(void)
{
	char test[100];
	puts("Please enter digit");
	gets(test);
	puts(" 你所输入的字符串将转换为数字整形。"); 
	printf("%d \n",atoi_n(test));
	
	
	
	
} 
int atoi_n(char*s)
{
	char ch;
	ch=*s++;
	int num;
	int sign_mark;
{	if(ch=='-')

	sign_mark=1;
	else if(isdigit(ch))
	{
		sign_mark=0;
		num=ch-'0';
	}

}
	while(1)
	{
		ch=*s++;
		if(isdigit(ch))
		num=num*10+ch-'0';
		else 
		break;
		
	}
	if(sign_mark==1)
	num=-num;
	
	return num;	
}



11.15

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void ToUpper(char*);
void ToLower(char*);
int main(int argc,char *argv[])
{
	char test[100];
	char ch;
	int i=0;
	puts("Please enter a line.");
	while((ch=getchar())!=EOF)
		{
			
		test[i]=ch;
		i++;

		}


     if(strcmp("-p",argv[1])==0)
     puts(test);
	else if(strcmp("-u",argv[1])==0)
	{
	ToUpper(test);
	puts(test);
    }
	else if(strcmp("-l",argv[1])==0)
	{
	ToLower(test);	
	puts(test);
	
	}
	return 0;
	
	
	
}
void ToUpper(char*s)
{
	while(*s)
	{
		*s=toupper(*s);
		s++;
	}
	
}
void ToLower(char*s)
{
	while(*s)
	{
		*s=tolower(*s);
		s++;
	}
}







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值