ep5_8.cpp
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. /* 5.8   分别编写下列字符串处理函数
  2. (1)char *strcat1 (char *s,const char *ct);
  3. 将串ct接到串s的后面,形成一个长串。【例5.2】以数组为参数,现用指针为参数。
  4. (2)int strlen1(const char * s);
  5. 求字符串长度的函数,返回串长(不包括串结束符)。
  6. (3)char * reverse (char *);
  7. 反置字符串s,即可将"break"成为"kaerb"。
  8. (4)char * strchr( const char *cs,char c);
  9. 查找字符c在串cs中第一次出现的位置,返回指向该字符的指针,若没有出现则返回Null。
  10. (5)char *strstr (const char *cs1,const char *cs2);
  11. 返回串cs2作为子串在cs1中第一次出现的位置,若没有出现则返回Null。
  12. */
  13. #include<iostream>
  14. using namespace std;
  15. char* strcat1(char* s,const char* ct){
  16. char* st=s;
  17. while(*s) s++;//*S作为条件,等效*S!=0
  18. while(*s++=*ct++);
  19. return st;
  20. }
  21. int strlen1(const char* s){
  22. int i=0;
  23. while(*s++) i++;
  24. return i;
  25. }
  26. char* reverse (char* s){
  27. char temp,* temp1=s,* temp2=s;
  28. while(*temp2) temp2++;
  29. temp2--;//指针移回串尾
  30. while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,重合或交错时停止
  31. temp=*temp1;
  32. *temp1=*temp2;
  33. *temp2=temp;
  34. temp1++;
  35. temp2--;
  36. }
  37. return s;
  38. }
  39. char* strchr( const char*cs,char c){
  40. while(*cs!=c&&*cs) cs++;
  41. if(*cs==0) cs=NULL; //未找到返回NALL
  42. return (char*)cs;
  43. }
  44. char *strstr (const char *cs1,const char *cs2){
  45. char *temp,*temp1;
  46. while(*cs1){                         //只要主串还有字符未查,则继续
  47. while(*cs1!=*cs2&&*cs1) cs1++; //与子串第1个字符不符,主串查找位置后移一个字符
  48. //找到主串含有子串的第一个字符,或主串查完停止
  49. if(*cs1){ //主串含有子串的第一个字符,核对子串全部字符
  50. temp=(char*)cs1;
  51. temp1=(char*)cs2;
  52. while(*temp==*temp1&&*temp1){temp++;temp1++;};
  53. if(*temp1==0) return (char*)cs1;     //找到子串返回
  54. else cs1++;//本轮未找到,主串查找位置后移一个字符
  55. }
  56. }
  57. return NULL;                        //返回NALL
  58. }
  59. int main(){
  60. char a[40]="束明";
  61. char b[20]="是东南大学学生";
  62. char c[40]="Southeast University";
  63. char *cp;
  64. cout<<a<<endl;
  65. cout<<b<<endl;
  66. strcat1(a,b);
  67. cout<<"字符串连接后:"<<endl;
  68. cout<<a<<endl;//打印字符数组a
  69. cout<<"字符串长度为:"<<strlen1(a)<<endl;
  70. cout<<c<<endl;
  71. cp=strchr(c,'U');
  72. if(cp==NULL) cout<<"未找到"<<endl;
  73. else cout<<cp<<endl;//找到输出由该字符开始的剩余串
  74. cp=strchr(c,'A');
  75. if(cp==NULL) cout<<"未找到"<<endl;
  76. else cout<<cp<<endl;
  77. cout<<reverse(c)<<endl;
  78. cp=strstr(a,"是");
  79. if(cp!=NULL) cout<<cp<<endl;//找到输出由该字符串开始的剩余串
  80. else cout<<"未找到"<<endl;
  81. cp=strstr(a,"大学生");
  82. if(cp==NULL) cout<<"未找到"<<endl;
  83. else cout<<cp<<endl;
  84. return 0;
  85. }
  86. /*请教师解释为了函数的通用性,有些可不要返回值的函数,也保留返回值*/