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 }
时间: 2024-10-14 19:11:46

c primer plus 习题答案(4)的相关文章

c++ primer plus 习题答案(1)

第五版c++ primer plus,IDE是visual studio2013. p180.2 1 #include<iostream> 2 #include<ctime> 3 #include<cstdlib> 4 5 int main(void){ 6 using namespace std; 7 int i, j, count=0, sum = 0, pt[10]; 8 double mean; 9 for (i = 0; i < 10; i++){ 10

c++ primer plus 习题答案(2)

p259.4 1 #include<iostream> 2 #include<cstdlib> 3 #include<cctype> 4 using namespace std; 5 struct stringy{ 6 char* str; 7 int ct; 8 }; 9 void set(stringy &, const char*); 10 void show(const stringy &, int times = 1); 11 void sho

c primer plus 习题答案(3)

p281.2 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define SIZE 5 4 void copy_arr(double ar[], double pr[],int n); 5 void copy_ptr(double ar[], double pr[], int n); 6 7 int main(void) 8 { 9 double source[5]={1.1, 2.2, 3.3, 4.4, 5.5}; 10 double

c primer plus 习题答案(6)

p376.7 A方案 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define LEN 40 4 void rank(FILE *, FILE *); 5 int main(void) 6 { 7 FILE *fp, *fc; 8 int ch, bp; 9 char file1[LEN], file2[LEN]; 10 11 puts("enter file1 name"); 12 if((fp=fopen(gets

c primer plus 习题答案(5)

p352.6 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int main(void) 6 { 7 int i, j, count[10]={0}, seed[10]; 8 9 for(i=0; i<10; i++){ 10 printf("please enter a seed.\n"); 11 scanf("%d", &see

c primer plus 习题答案(7)

p421.5 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define CSIZE 4 4 #define SCORE 3 5 6 void get_info(struct students *p); 7 void get_average(struct students *p); 8 void print_info(struct students *p); 9 void print_class_average(struct student

c++ primer plus 习题答案(8)

p475.2 //头文件: class Cd{ private: char *performers; char *label; int selections; double playtime; public: Cd(char *s1, char *s2, int n, double x); Cd(const Cd & st); Cd(); virtual ~Cd(); virtual void Report()const; Cd & operator = (const Cd & s

《C++primer》v5 第5章 语句 读书笔记 习题答案

5.1 空语句只有一个";".如果什么也不想做可以使用空语句. 5.2 用花括号{}括起来的叫块,也叫复合语句.有多条语句作用在同一个作用域时,需要用花括号括起来. 5.3 降低了. 5.4 (a)每次迭代时候会初始化iter,但是iter缺少初值,所以这段代码根本不会通过编译.另外这里的括号需要一个bool类型的,而定义迭代器根本不会返回一个bool类型.假如上面那些问题都可以通过,每次迭代都会初始化这个iter,会导致死循环. (b)我试了一下编译未通过是因为没找到适合的find函

《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案

3.1略 3.2 string str; //读行 while(getline(cin,str)) cout<<str<<endl; //读单个词 while(cin>>str) cout<<str<<endl; 3.3 输入运算符读到空白符结束 getline读到换行符结束,并丢弃换行符 3.4 比较大小. 比较大小是比较的第一个不相同的字符的大小. int main() { string a,b; cin>>a>>b;