C Primer Plus
第五版
第十一章 字符串和字符串函数
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;
}