c primer plus 习题答案(4)

p319.3

复制代码
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<ctype.h>
 4 #include<string.h>
 5 void deliver(char *a1, char *a2, int n);
 6 
 7 int main(void)
 8 {
 9     int n;
10     char str1[81], *ptr, ar[81];
11     ptr=gets(str1);
12     n=strlen(ptr);
13     deliver(ar, ptr, n);
14     puts(ar);
15 
16     system("pause");
17     return 0;
18 }
19 
20 void deliver(char *a1, char *a2, int n)
21 {
22     int i;
23     for(i=0; i<n; i++){
24         *(a1+i)=*(a2+i);
25         if(isspace(*(a1+i)))
26             break;
27     }
28     if(i==n)
29         *(a1+i)='\0';
30     else
31         *(a1+i+1)='\0';
32 }
复制代码

p320.5

复制代码
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int is_within(char *ar, char ch);
 4 
 5 int main(void)
 6 {
 7     char ar[81], ch;
 8     do
 9     {
10     puts("input a range string:");
11     gets(ar);
12     puts("input match char(enter q to quit):");
13     ch=getchar();
14     getchar();
15     if(is_within(ar, ch)) puts("match");
16     else puts("can't find");
17 
18     }while(ch!='q');
19 
20     system("pause");
21     return 0;
22 }
23 
24 int is_within(char *ar, char ch)
25 {
26     while(*ar!='\0')
27         if(*ar==ch)
28             return 1;
29         else
30             ar++;
31     return 0;
32 }
复制代码

p320.6

复制代码
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 char *strncpy(char *s1, char *s2, int n);
 5 
 6 int main(void)
 7 {
 8     char s1[81], s2[81];
 9     int n;
10     puts("please input a range string for s2:");
11     gets(s2);
12     puts("please input a range string for s1:");
13     gets(s1);
14     puts("please input a number of copies:");
15     scanf("%d", &n);
16     getchar();
17 
18     strncpy(s1, s2, n);
19     puts(s1);
20 
21     system("pause");
22     return 0;
23 }
24 
25 char *strncpy(char *s1, char *s2, int n)
26 {
27     int i;
28 
29     if(n<=strlen(s2)){
30         for(i=0; i<n; i++)
31             *(s1+i)=*(s2+i);
32     *(s1+i)='\0';
33     }
34     
35     else if(n>strlen(s2)){
36         for(i=0; i<strlen(s2); i++)
37             *(s1+i)=*(s2+i);
38         while(i<n){
39             *(s1+i)='\0';
40             i++;
41         }
42     }
43     return s1;
44 }
复制代码

参考答案给的strncpy()定义如下:

复制代码
 1 char *mystrncpy(char *p1, char *p2, int n)
 2 {  
 3    char *p=p1;  
 4    while(*p1++ != '\0') continue; 
 5    *--p1 = *p2; 
 6    n--;  
 7    while(n>0 && *p2 != '\0') {   
 8        *++p1 = *++p2;  
 9        n--; 
10    } 
11    return p;
12
复制代码

 

posted @   pioneer1132203  阅读(239)  评论(0)    收藏  举报
(评论功能已被禁用)
编辑推荐:
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
阅读排行:
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
点击右上角即可分享
微信分享提示