5.编写一个函数is_within(),它接受两个参数,一个是字符,另一个是字符串指针。其功能是如果字符在字符串中,就返回一个非0值(真);如果字符不在字符串中,就返回0值(假)。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。

# include <stdio.h>int is_within(char ch, char * string);
void clear();//   清除每次输入的换行符
int main(void)
{char ch;char * string = "See you at the snack bar.";printf("本程序是检测字母是否在字符串中,若想退出请输入小写字母 q\n");printf("enter character:\n");scanf("%c", &ch);while(ch != 'q'){if(is_within(ch, string))printf("子母 %c 在字符串中;\n", ch);elseprintf("子母 %c 不在字符串中;\n", ch);printf("enter character:\n");clear();scanf("%c", &ch);}return 0;
}int is_within(char ch, char * string)
{int i = 1;while(*string != ch && *string != '\0')string++;if('\0' == *string)i = 0;return i;
}void clear()
{char ch;while((ch = getchar()) != '\n')continue;
}

6.strncpy(s1, s2, n)函数从s2复制n个字符给s1,并在必要时截断s2或为其填充额外的空字符。如果s2的长度等于或大于n,目标字符串没有标志结束的空字符。函数返回s1。自己编写这个函数,并在一个使用循环语句为这个函数提供输入的完整程序中进行测试。

# include <stdio.h>char *copystring(char *s1, char *s2, int n);
void clear();
int main(void)
{char s1[11] = "Hell !";char s2[31] = "sunddddddddddays.";int n;for(int i = 0; i < 3; i++){printf("请输入你要复制的长度:\n");scanf("%d", &n);clear();copystring(s1,s2,n);puts(s1);}      return 0;
}char *copystring(char *s1, char *s2, int n)
{for(int i = 0; i < n; i++){if('\0' == s2[i]){s1[i] = '\0';break;}s1[i] = s2[i];}if(n == i){s1[i] = '\0';}return s1;
}void clear()
{char ch;while((ch = getchar()) != '\n')continue;
}

7.编写一个函数string_in(),它接受两个字符串指针参数。如果第二个字符串被包含在第一个字符串中,函数就返回被包含的字符串开始的地址。例如,string_in(“hats”, “at”)返回hats中a的地址,否则,函数返回空指针。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。

# include <stdio.h>char *instring(char * s1, char * s2);
int main(void)
{char * p;char *s1 ="headfhloafkjafd";char *s2 = "ea";   //有相同,instring()函数返回字母e的地址p = instring(s1, s2);printf("%c\n", *p);return 0;
}char *instring(char * s1, char * s2)
{int is = 1;  //判断循环是否继续int i = 0;   //表示s2中第一个字母是否与s1中有相同的字母char *p;//p为s2字符串的第一个字母while(is){if(0 == i)   //i = 0时,s1中还没找到相同于s2字符串的首字符{if(*s1 == *s2)//{i=1;p = s2;s1++;s2++;}elses1++;}if(1 == i)  //i= 1时,匹配s2剩下的字母,一旦不同,令i = 0{if(*s1 == *s2){s1++;s2++;}else{if('\0' == *s2)//  当s2值为0时,s1中就有与s2字符串相同的部分return p;else{i = 0;s1++;s2 = p;}}}if('\0' == *s1)is = 0;}return NULL;
}

8.编写一个函数,其功能是使输入字符串反序。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。

# include <stdio.h>
# include <string.h>void reverse(char * target);
int main(void)
{char target[30];for(int i = 0; i < 3; i++){gets(target);reverse(target);puts(target);}return 0;
}void reverse(char * target)
{int len;char t;len = strlen(target);for(int i = 0; i < len/2; i++){t = target[i];target[i] = target[len-i-1];target[len-i-1] = t;}
}

9.编写一个函数,其参数为一个字符串,函数删除字符串中的空格。在一个可以循环读取的程序中进行测试,直到用户输入空行。对于任何输入字符串,函数都应该适用并可以显示结果。

# include <stdio.h>void deletespace(char * target);
int main(void)
{char target[31];while(*target){gets(target);deletespace(target);puts(target);}return 0;
}void deletespace(char * target)
{char * ch;while(*target){if(' ' == *target){while(*target){ch = target;target++;* ch = *target;}}elsetarget++;}
}

10,编写一个程序,读取输入,直到读入了10个字符串或遇到EOF,由二者中最先被满足的那个终止读取过程。这个程序可以为用户提供一个有5个选项的菜单:输出字符串列表、按ASCII顺序输出字符串、长度递增顺序输出字符串、按字符串中第一个单词的长度输出字符串、退出。菜单可以循环直到用户输入退出请求。当然,程序要能真正完成菜单中的各项功能。

# include <stdio.h>
# include <string.h>void clear();
void show_string(char *target[10], int n);
void ascll_string(char *target[10], int n);
void len_string(char *target[10],int n);
int len_word_first(char *target);
void strlen_firstword(char *target[10], int n);
int main(void)
{char target[10][50];char *ptr_str[10];//初始字符串char *ptr_ascll[10];//按ASCLL码顺序的字符串char *ptr_len[10];//按长度递增顺序的字符串char *ptr_firstword[10];//按字符串中第一个单词的长度输出的字符串char ch;int i = 0;printf("请最多输入10个字符串.\n");while(i != 10 && gets(target[i]) != NULL && target[i][0] != '\0'){ptr_str[i] = target[i];ptr_ascll[i] = target[i];ptr_len[i] = target[i];ptr_firstword[i] = target[i];i++;}printf("----------字符串的操作-------------------\n");printf("  s 输出初始字符串\n");printf("  a 按ASCLL顺序输出字符串\n");printf("  l 按长度递增顺序输出字符串\n");printf("  f 按字符串中第一个单词的长度输出字符串\n");printf("  e 退出\n");printf("-----------------------------------------\n");while((ch = getchar()) != 'e'){clear();switch(ch){case 's':show_string(ptr_str, i);break;case 'a':ascll_string(ptr_ascll,i);show_string(ptr_ascll, i);break;case 'l':len_string(ptr_len, i);show_string(ptr_len, i);break;case 'f':strlen_firstword(ptr_firstword, i);//      printf("%d\n", len_word_first(ptr_firstword[1]));show_string(ptr_firstword, i);break;case 'e':return 0;default :printf("输入错误,请重新输入!");}  printf("----------字符串的操作-------------------\n");printf("  s 输出初始字符串\n");printf("  a 按ASCLL顺序输出字符串\n");printf("  l 按长度递增顺序输出字符串\n");printf("  f 按字符串中第一个单词的长度输出字符串\n");printf("  e 退出\n");printf("-----------------------------------------\n");}return 0;
}void clear()
{char ch;while((ch = getchar()) != '\n')continue;
}void show_string(char *target[10], int n)
{for(int i = 0; i < n; i++){puts(target[i]);}
}void ascll_string(char *target[10], int n)
{char *str;for(int i = 0; i < n-1; i++){for(int j = 0; j < n-1; j++){if( strcmp(target[j], target[j+1]) > 0 ){str = target[j];target[j] = target[j+1];target[j+1] = str;}}}
}void len_string(char *target[10],int n)
{char *str;for(int i = 0; i < n-1; i++){for(int j = 0; j < n-1; j++){if( strlen(target[j]) > strlen(target[j+1]) ){str = target[j];target[j] = target[j+1];target[j+1] = str;}}}
}int len_word_first(char *target)
{int i = 0;char ch = *target;while(ch < 65 || ch > 122 || (ch < 97 && ch > 90)){ch = *target++;}while( (ch > 65 && ch < 97) || (ch > 90 && ch < 122) ){i++;ch = *target++; }return i;
}void strlen_firstword(char *target[10], int n)
{char *str;for(int i = 0; i < n-1; i++){for(int j = 0; j < n-1; j++){if( len_word_first(target[j]) > len_word_first(target[j+1]) ){str = target[j];target[j] = target[j+1];target[j+1] = str;}}}
}

11.编写一个程序。功能是读取输入,直到遇到EOF,并报告单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h系列函数。

# include <stdio.h>
# include <ctype.h>int main(void)
{int words = 0;//单词数int uppercase = 0;//大写字母int lowercase = 0;//小写字母int punctuation = 0;//标点符号数int digit = 0;//数字字符数int i = 0;//  判断单词char ch1, ch2;while((ch1 = getchar()) != '\n'){   i = 0;if(islower(ch1)){lowercase++;i = 1;}else if(isupper(ch1)){uppercase++;i = 1;}else if(ispunct(ch1)){punctuation++;}else if(isdigit(ch1)){digit++;   }if(1 == i){ch2 = ch1;}if( (ch2 >= 65 && ch2 <= 97) || (ch2 >= 90 && ch2 <= 122) ){if(ch1 < 65 || ch1 > 122 || (ch1 < 97 && ch1 > 90) ){words++;ch2 = ch1;}}}if( (ch2 >= 65 && ch2 <= 97) || (ch2 >= 90 && ch2 <= 122))words++;printf("%d %d %d %d %d\n", words, uppercase, lowercase, punctuation, digit);return 0;
}

12.编写一个程序,按照相反的单词顺序显示命令行参数。即,如果命令行参数是see you later,程序的显示应该为later you see。

# include <stdio.h>
# include <stdlib.h>
# include <string.h>int main(int argc, char *argv[])
{char *ps;for(int i = 0; i < argc / 2; i++){ps = argv[i];argv[i] = argv[argc-1-i];argv[argc-1-i] = ps;}for(int j = 0; j < argc; j++){puts(argv[j] );}return 0;
}

记录——《C Primer Plus (第五版)》第十一章编程练习第5-12题相关推荐

  1. C++ Primer Plus第六版第六章编程练习 第4题, 加入Benevolent Order of Programmer后,在BOP大会上

    /*************************************************************************************************** ...

  2. C++Primer第五版 第十一章习题答案(31~38)

    31:知识点:在multimap中,具有相同关键字的元素会相邻存储 #include<iostream> #include<string> #include<fstrea ...

  3. C Primer Plus第六版第七章编程题目与参考答案⭐

    1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数.换行符数和所有其他字符的数量. #include <stdio.h> #define STOP '#' #define SP ...

  4. c++ primer plus第六版第六章编程练习

    编写程序读取键盘输入,回显除数字外字符,同时大写转小写,小写转大写,遇'@'就停止. //练习6.1 读取键盘输入,回显输出(除数字),另外大写字母和小写字母互转,遇"@"则退出程 ...

  5. C++primer plus第六版第四章编程题代码

    1. #include "stdafx.h" #include <iostream> #include <string> #include <vect ...

  6. C Primer Plus第六版第四章编程题目与参考答案⭐

    1.编写一个程序,提示用户输入名和姓,然后以"名,姓"的格式打印出来. #include <stdio.h>int main() {char firstname[20] ...

  7. C++ Primer Plus 第六版 所有章节课后编程练习答案

    我的独立博客地址:www.blog4jimmy.com,欢迎大家关注 下面的是C++ Primer Plus 第六版所有章节的课后编程练习的答案,都是博主自己写的,有不对的地方请大家留言指出讨论讨论 ...

  8. C Primer Plus第五版记录

    此文用来记录我在学习<C Primer Plus第五版>期间所遇到的重要知识点.以日后用来提醒自己,也十分希望广大博友留言与我一起讨论交流. ----------------------- ...

  9. C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.2--函数参数传递习题答案 目录 6.2 函数参数传递 6.2.1 传值参数(值传递) 指针形参 6.2.2 传引用参数(引用传递) 使用引用 ...

  10. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用阅读笔记 目录 目录 6.1 形参和实参的区别 6.2 函数语法考察 6.4 交互式输入数字,计算阶乘 6.5 输出实 ...

最新文章

  1. 总监路上的第1年,聊聊几点感受
  2. clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝
  3. bzoj-3288 3288: Mato矩阵(数论)
  4. php对应哪个oracle版本,Oracle 版本说明
  5. aspx练习备忘录#想锤自己两拳#1
  6. 2020年Airbnb爱彼迎中国房东社区报告
  7. 【Python】Python3.7.3 - Python命令行参数详解
  8. rpt水晶报表制作过程
  9. vilatile用法总结
  10. 基于matlab的2ASK调制解调仿真
  11. php自定义表单 系统,PHP自定义表单系统Php综合源码下载-华软网
  12. Power Query 系列 (05) - M 语言介绍
  13. 如何处理图片放大后变模糊的情况?
  14. 手把手教你批量保存花瓣图片到同一目录的技巧
  15. DataV可视化大屏-基本操作说明
  16. Mac IntelliJIDEA非正常关闭解决(reopen失败)
  17. 推荐10款效率可以翻倍的IDEA插件,撸码利器
  18. 干得好也要说得好| 这样向领导汇报,让你在职场上如鱼得水
  19. 菜鸟成长手册:路由器技术深入剖解
  20. 线代笔记:线性相关性,向量组的秩

热门文章

  1. matlab makesurf,matlab制作GIF之hello world
  2. mysql 2.71828_Picasso 2.71828 用法
  3. 大学四年只学java_大学四年废了怎么办,不如来学java
  4. Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)
  5. 理解metrics.classification_report
  6. opencv3.4.5安装包
  7. 立创EDA元件转换为AD库封装(Altium Designer)
  8. leetcode886.PossibleBipartition
  9. 排序算法第二篇——折半插入排序
  10. selenium-webdriver——如何在启动firefox时加载扩展