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++;
}
}