1. 程式人生 > >C Primer Plus 第十一章 習題總結……2015.5.10

C Primer Plus 第十一章 習題總結……2015.5.10


1、沒有加上字串結尾標誌 空字元'\0';
2、#include<stdio.h>
int main(void)
{
char note[]="See you at snack bar: ";
char *ptr;
ptr=note;
puts(ptr);
puts(++ptr);
note[7]='\0';
puts(note);
puts(++ptr);
return 0;

3、#include<stdio.h>
#include<string.h>
int main(void)
{
char food[]="Yummy";
char*ptr;
ptr=food+strlen(food);
while(--ptr>=food)
  puts(ptr);//指標後退一下,就多輸出一個字元
  return 0;



4、#include<stdio.h>
#include<string.h>
int main(void)
{
char goldwyn[40]="art of it all ";
char samuel[40]="I read p";
char*quote="the way through.";
    strcat(goldwyn,quote);
    strcat(samuel,goldwyn);
     puts(samuel);
  return 0;



#include<stdio.h>
char *pr(char*str)
{
char*pc;
pc=str;
while(*pc)
 putchar(*pc++);
do
 {
 putchar(*--pc);
 }while(pc-str);
 
return (pc);


}
int main(void)
{
char *str="what do you have?";
char *ptr;
ptr=*pr(str);
puts(ptr);

return 0;
}


先正序列印後倒序列印,指標char型別  指標減量運算    指向的


值減量運算  列印空字元 先判斷後執行 先執行後判斷 列印一個空
1 2


7、#include<stdio.h>
#include<string.h>
#define M1 "How are ya,sweetie?"
char M2[40]="Beat the clock";
char *M3="chat";
int main(void)
{
char words[80];
printf(M1);
puts(M1);
puts(M2);
puts(M2+1);
strcpy(words,M2);
strcat(words," Win a toy. ");
puts(words);
words[4]='\0';
puts(words);
while(*M3)
 puts(M3++);
puts(--M3);
puts(--M3);
M3=M1;
puts(M3);
return 0;
}


 8、
#include<stdio.h>
int main(void)
{
char str1[]="gawsie";
char str2[]="bletonism";
char *ps;
int i=0;
for(ps=str1;*ps!='\0';ps++)
  {
  if(*ps=='a'||*ps=='e')
           putchar(*ps);
   else
       (*ps)--;
   putchar(*ps);
  } 
  putchar('\n');
  while(str2[i]!='\0')
  {
  printf("%c",i%3?str2[i]:'*');
  ++i;
  }
  return 0;
}
9、#include<stdio.h>
int Return_long(char*ptr);
int main(void)
{
char *str="what are you ?";
printf("%d",Return_long(str));
return 0;
}
int Return_long(char*ptr)
{    
      int count=0;
while(*ptr++!='\0')
  count++;
return count;  
}
10、
#include<stdio.h>
#define MSG ' '
char *Return_long(char*ptr);
int main(void)
{
char *str="what are you ?";
printf("%d",*Return_long(str));
return 0;
}
char *Return_long(char*ptr)
{    
      int count=0;
while(*ptr++!='\0')
    if(*ptr==MSG)
       return ptr;
return  NULL;
}
11、
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define ANSWER "Grant"
int main(void)
{
char try[40];
puts("who is buried in Grant's tomb?");
gets(try);
try[0]=toupper(try[0]);
while(strcmp(try,ANSWER)!=0)
{
puts("No,that`s wrong.Try again.");
gets(try);
}
puts("that's right!");
return 0;
}
程式設計練習
1、#include<stdio.h>
 void Read_array(char *ptr,int n);
 int main(void)
 {   
     
 char arr[10];
 Read_array(arr,10);
 return 0;
 }
  void Read_array(char *ptr ,int n)
  {
     int i=0;
     for(i=0;i<n;i++)
        *(ptr+i) =getchar();
     for(i=0;i<n;i++)
        putchar(ptr[i]);
  }
 2、
#include<stdio.h>
 #include<string.h>
 void Read_array(char *ptr,int n);
 int main(void)
 {   
     
 char arr[10];
 Read_array(arr,10);
 return 0;
 }
  void Read_array(char *ptr ,int n)
  {
     int i=0,a;
     char ch;
     
     ch=getchar();
       while(ch!='\n'&&ch!=' '&&i<n)
       {
        *(ptr+i) = ch;
        ch=getchar();
         
i++;
a=i;
       }
       
        
     for(i=0;i<a;i++)
    
        putchar(ptr[i]);

  }
 3. 
#include<stdio.h>
#include<string.h>
 void Read_array(char *ptr,char arr[]);
 int main(void)
 {   
     
 char arr1[20],arr2[20];
 gets(arr1);
 
 Read_array(arr1,arr2 );
 return 0;
 }
  void Read_array(char *ptr ,char arr[])
  {
     int i=0;
     char ch;
       while((ch=*(ptr+i))!=' ' )
       {
            arr[i]=*(ptr+i) ;
         
i++;
       }
       
       arr[i]='\0';
     for(i=0;i<strlen(arr);i++)
    
        putchar(ptr[i]);

  }
  


4、
#include<stdio.h>
#include<string.h>
int Read_array(char *str,char check_ch);
 int main(void)
 {   
     
 char *ptr="what are you doing ?";
 char ch;
 ch=getchar();
   printf(" %c is *ptr in %d place",ch,Read_array(ptr,ch 


));
 return 0;
 }
  int Read_array(char *str ,char check_ch)
  {
     int i=0;
       while(*(str+i)!=check_ch )
       {
i++;
       }
  return ++i;
  }
  


5、
#include<stdio.h>
#include<string.h>
#include<string.h>
int Read_array(char *str,char check_ch);
 int main(void)
 {   
     
 char *ptr="what are you doing ?";
 char ch;
 
 while((ch=getchar())!='#')
 {
 if(Read_array(ptr,ch ))
      printf(" %s has %c\n ",ptr,ch);
    else
      printf(" %s has not  %c \n ",ptr,ch);
  while((ch=getchar())!='\n')
    continue;
 }
 
 return 0;
 }
  int Read_array(char *str ,char check_ch)
  {
     int i ;
     for(i=0;i<strlen(str);i++)
       if(*(str+i)==check_ch)
        
          return str+i;
      
          return NULL;    
 
  }
5
 #include<stdio.h>
#include<string.h>
#include<string.h>
int Read_array(char *str,char check_ch);
 int main(void)
 {   
     
 char *ptr="what are you doing ?";
 char ch;
 
 while((ch=getchar())!='#')
 {
 if(Read_array(ptr,ch ))
      printf(" %s has %c\n ",ptr,ch);
    else
      printf(" %s has not  %c \n ",ptr,ch);
  while((ch=getchar())!='\n')
    continue;
 }
 
 return 0;
 }
  int Read_array(char *str ,char check_ch)
  {
     int i ;
     for(i=0;i<strlen(str);i++)
       if(*(str+i)==check_ch)
        
          return 1;
      
          return 0;    
 
  }
  


6、#include<stdio.h>
#include<string.h>
char * Strncmp(char*s1,char* s2,int n);
 int main(void)
 {   
     
 char ptr[100]="what are you doing ?";
 char *ch="AAAA";
 
 printf("%s",Strncmp(ptr,ch,5))  ; 
 
 return 0;
 }
  char * Strncmp(char*s1,char *s2,int n)
  {
    int i;
    int num;
     num=strlen(s1);
     for(i=0;i<n;i++)
       if(*(s2+i)!='\0')
            s1[num+i]=s2[i];
        if(n==i)  
  s1[num+i]='\0';
else 
   s1[num+i+1]='\0';
return s1;  
 
  }
  


#include<stdio.h>
#include<string.h>
#define MAX 100
 char*string_in(char*ptr,char*str,int n);
 int main(void)
 {
    char arr1[MAX],arr2[MAX];
    char *char_string;
    int n;
    printf("Please enter two character string.\n");
    gets(arr1);
    n=strlen(arr1);
    gets(arr2);
   
   char_string= string_in(arr1,arr2, n);
   printf("%s",char_string);
   
   return 0;
 }
 char*string_in(char*ptr,char*str,int n)
 {
 int i;
 for(i=0;i<n;i++)
 {
if(!strcmp(ptr+i,str))
    return ptr+i;


}
 return NULL;
  
 }
8、
#include<stdio.h>
#include<string.h>
#define MAX 100
 char string_in(char*ptr ,int n );
 int main(void)
 {
    char arr1[MAX]  ;
    int n;
    printf("Please enter  character string.\n");
    gets(arr1);
     n=strlen(arr1); 
   string_in(arr1,  n);
    
    
   
   return 0;
 }
 char string_in(char*ptr,int n)
 {
   int i;
   for(i=n-1;i>=0;i--)
    {
    putchar(*(ptr+i));
    }
  
 }


#include<stdio.h>
#include<string.h>
#define MAX 100
 char string_in(char*ptr ,int n );
 int main(void)
 {
    char arr1[MAX]  ;
    int n;
    printf("Please enter  character string.\n");
    while(1)
     {  gets(arr1);
         
        if(*arr1=='\0')
        {
        break;
        } 
     n=strlen(arr1); 
       string_in(arr1,  n);
       printf("\n");
     }
     
   return 0;
 }
 char string_in(char*ptr,int n)
 {
   int i;
   for(i=n-1;i>=0;i--)
    {
    putchar(*(ptr+i));
    }
  
 }


9、#include<stdio.h>
 
#define MAX 100
 char string_in(char*ptr ,char arr[] );
 int main(void)
 {
    char arr1[MAX] ,arr2[MAX] ;
    int n;
    printf("Please enter  character string.\n");
     while(1)
      {  
        gets(arr1);
         
        if(*arr1=='\0')
        {
        break;
        } 
       string_in(arr1,  arr2);
      
     }
     
   return 0;
 }
 char string_in(char*ptr,char arr[])
 {     
        int i=0 ;
   while(*ptr)
   {
   if(*ptr!=' ')
    {
    arr[i]=*ptr ;
 i++;
    }
    ptr++;
   }
   arr[i]='\0';
   puts(arr);
 }
10 字串排序是排序指標而不是字串
正確 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LINE 3
#define RANK 100
void charater_string(int n,char*ptr[ ]);


void alphabet_list(int n,char*str[]);


void string_length(int n,char*ptr[]);


void First_word_length(int n,char*ptr[]);
int string_in(char *ptr);
void Quit();


int main(void)

    int i,j,num;
   char arr[LINE][RANK];
   char *string[LINE];
   printf("Please enter charater string.\n");
   for(i=0;i<LINE;i++)
     {
     gets(arr[i]) ;
 string[i]=arr[i];     
     } 
     while(1)
     {
     printf("Please choice number:\n");
     printf("1)輸出字串列表       2)按ASCII順序輸出字元


串\n");
     printf("3)按長度遞增輸出       4)按字串第一個單詞長


度輸出    5)退出\n");
     scanf("%d",&num);
     switch(num)
     {
     case 1:charater_string(LINE,string);
           break;
     case 2:alphabet_list(LINE,string);
           break;
       case 3:string_length(LINE,string);
           break;
     case 4:First_word_length(LINE,string);
           break;
     case 5:Quit();
           break; 
     default:break;
     }
    
     }
     return 0;

}
void charater_string( int n,char*ptr[ ])
{
int i=0;
for(i=0;i<n;i++)
puts(ptr[i]);
}


void alphabet_list(int n,char*str[ ])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(str[i],str[j])>0)
{
  temp= str[j];
 str[j]= str[i];
 str[i]= temp;
}

}
}
charater_string(n,str);
}


void string_length( int n,char*ptr[ ])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((strlen(ptr[i])-strlen(ptr


[j]))>0)
{
 temp=ptr[j];
ptr[j]=ptr[i];
ptr[i]= temp;
}

}
}
charater_string(n,ptr);
}


void First_word_length(int n,char*ptr[ ])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((string_in(ptr[i])-string_in


(ptr[j]))>0)
{
temp=ptr[j];
ptr[j]=ptr[i];
ptr[i]=temp;
}

}
}
charater_string(n,ptr);
}


void Quit()
{
exit(1);
}
int string_in(char *ptr)
 {     
        int i=0 ;
   while(*ptr)
   { 
if(*ptr==' ')
return i;
   i++;
   *ptr++;
   } 
 }


/////*******************************///////


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LINE 5
#define RANK 100
void charater_string(char*ptr[],int n);
void alphabet_list(char*str[],int n);
void string_length(char*ptr[],int n);
void First_word_length(char*arr[],int n);
int string_in(char*ptr);
void Quit();
int main(void)

    int i,j,num;
   char arr[LINE][RANK];
   printf("Please enter charater string.\n");
   for(i=0;i<LINE;i++)
     {
     for(j=0;j<RANK;j++)
     {
      arr[i][j]=getchar();
     }        
     } 
     printf("Please choice number:\n");
     printf("1)輸出字串列表       2)按ASCII順序輸出字元


串\n");
     printf("3)按長度遞增輸出       4)按字串第一個單詞長


度輸出    5)退出\n");
     scanf("%d",&num);
     switch(num)
     {
     case 1:charater_string(arr[LINE],LINE);
           break;
     case 2:alphabet_list(arr[LINE],LINE);
           break;
        case 3:string_length(arr[LINE],LINE);
           break;
     case 4:First_word_length(arr[LINE],LINE);
           break;
     case 5:Quit();
           break;
     default:break;
     }
    

}
void charater_string( char*ptr[],int n)
{
int i=0;
for(i=0;i<n;i++)
puts(ptr[i]);
}
void alphabet_list(char*str[],int n)
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(str[i],str[j])>0)
{
temp=str[j];
str[j]=str[i];
str[i]=temp;
}

}
}
charater_string(str,n);
}
void string_length( char*ptr[],int n)
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((strlen(ptr[i])-strlen(ptr


[j]))>0)
{
temp=ptr[j];
ptr[j]=ptr[i];
ptr[i]=temp;
}

}
}
charater_string(ptr,n);
}
void First_word_length(char*arr[],int n)
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((string_in(ptr[i])-string_in


(ptr[j]))>0)
{
temp=ptr[j];
ptr[j]=ptr[i];
ptr[i]=temp;
}

}
}
charater_string(ptr,n);
}
void Quit()
{
exit(1);
}
int string_in(char*ptr)
 {     
        int i=0 ;
   while(*ptr)
   {
if(*ptr==' ')
return i;
   i++;
   ptr++;
   } 
 }




#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LINE 3
#define RANK 100
void charater_string(int n,char(*ptr)[RANK]);
/*
void alphabet_list(int n,char(*str)[RANK]);


void string_length(int n,char(*ptr)[RANK]);
*/
void First_word_length(int n,char(*ptr)[RANK]);
int string_in(char**ptr);
void Quit();


int main(void)

    int i,j,num;
   char arr[LINE][RANK];
   printf("Please enter charater string.\n");
   for(i=0;i<LINE;i++)
     {
     
     gets(arr[i]) ;
          
     } 
     while(1)
     {
     printf("Please choice number:\n");
     printf("1)輸出字串列表       2)按ASCII順序輸出字元


串\n");
     printf("3)按長度遞增輸出       4)按字串第一個單詞長


度輸出    5)退出\n");
     scanf("%d",&num);
     switch(num)
     {
     case 1:charater_string(LINE,arr);
           break;/*
     case 2:alphabet_list(LINE,arr);
           break;
       case 3:string_length(LINE,arr);
           break;*/
     case 4:First_word_length(LINE,arr);
           break;
     case 5:Quit();
           break; 
     default:break;
     }
    
     }
     return 0;

}
void charater_string( int n,char(*ptr)[RANK])
{
int i=0;
for(i=0;i<n;i++)
puts(ptr[i]);
}
/*
void alphabet_list(int n,char(*str)[RANK])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(str[i],str[j])>0)
{
  temp= *str[j];
 *str[j]= *str[i];
 *str[i]= temp;
}

}
}
charater_string(n,str);
}


void string_length( int n,char(*ptr)[RANK])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((strlen(ptr[i])-strlen(ptr


[j]))>0)
{
 temp=*ptr[j];
*ptr[j]=*ptr[i];
*ptr[i]= temp;
}

}
}
charater_string(n,ptr);
}
*/
void First_word_length(int n,char(*ptr)[RANK])
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if((string_in(ptr[i])-string_in


(ptr[j]))>0)
{
temp=*ptr[j];
*ptr[j]=*ptr[i];
*ptr[i]=temp;
}

}
}
charater_string(n,ptr);
}


void Quit()
{
exit(1);
}
int string_in(char**ptr)
 {     
        int i=0 ;
   while(**ptr)
   { 
if(**ptr==' ')
return i;
   i++;
   *ptr++;
   } 
 }
 
////**********************************///
11\
#include<stdio.h>
#include<ctype.h>
int main(void)
{
int count=0;
int words=0;
int Big_char=0;
int Small_char=0;
int  n=0;
int num=0,i=0;
char arr[]="ANJDNjdcj,saefnhc,1248nsm,lsd.";
char *ptr;
ptr=arr;
while(*ptr)
{if(isupper(*ptr))
  Small_char++;
if(*ptr==' ')
  words++;
   if(isalpha(*ptr))
  count++;
       
 if(ispunct(*ptr))
    {
    n++;
    words++;
    }
 if(isdigit(*ptr))
    num++;
ptr++;
}
printf("%d %d %d %d %d \n",words,count,Small_char,n,num);
printf("%d",Small_char);
return 0;
}