[关闭]
@yudesong 2017-06-24T15:54:39.000000Z 字数 1418 阅读 546

字符串与矩阵

字符串


1. 字符串匹配
  1. #include <iostream>
  2. #include<string.h>
  3. using namespace std;
  4. //字符串匹配算法
  5. int BFMatch(char *p,char *q)
  6. {
  7. int i=0,j;
  8. while(i<strlen(p))
  9. {
  10. j = 0;
  11. while(p[i]==q[j] && j<strlen(q))
  12. {
  13. i++;
  14. j++;
  15. }
  16. if(j==strlen(q))
  17. return i-strlen(q);
  18. i=i-j+1;
  19. }
  20. return -1;
  21. }
  22. int BF(char *p,char *q)
  23. {
  24. int i=0,j=0;
  25. while(i<strlen(p) && j<strlen(q))
  26. {
  27. if(p[i]==q[j])
  28. {
  29. i++;
  30. j++;
  31. }else
  32. {
  33. i=i-j+1;
  34. j=0;
  35. }
  36. }
  37. if(j==strlen(q)) return i-strlen(q);
  38. return -1;
  39. }
  40. void getNext(char *p,int next[])
  41. {
  42. next[0]=-1;
  43. int j=0,k=-1;
  44. while(j<strlen(p))
  45. {
  46. if(k==-1 || p[j]==p[k])
  47. {
  48. j++;
  49. k++;
  50. next[j]=k;
  51. }
  52. else k=next[k];
  53. }
  54. }
  55. int KMP(char *p,char *q)
  56. {
  57. int i=0,j=0;
  58. int next[20];
  59. getNext(q,next);
  60. while(i<strlen(p) && j<strlen(q))
  61. {
  62. if(p[i]==q[j])
  63. {
  64. i++;
  65. j++;
  66. }
  67. else j=next[j];
  68. }
  69. if(j==strlen(q)) return i-strlen(q);
  70. return -1;
  71. }
  72. int main()
  73. {
  74. char *p="ababcababa";
  75. char *q="abc";
  76. cout<<KMP(p,q)<<endl;
  77. return 0;
  78. }
2. 矩阵相乘
  1. void func(int num1[N][N],int num2[N][N],int s[N][N])
  2. {
  3. int i,j,k;
  4. for(i=0;i<N;i++)
  5. for(j=0;j<N;j++)
  6. {
  7. for(k=0;k<N;k++)
  8. s[i][j]=s[i][j]+num1[i][k]*num2[k][j];
  9. }
  10. for(i=0;i<N;i++)
  11. for(j=0;j<N;j++)
  12. cout<<s[i][j]<<" ";
  13. }
3. 5*5阶螺旋方阵
  1. #include <stdio.h>
  2. #define MAX_SIZE 100
  3. void func(int a[MAX_SIZE][MAX_SIZE],int n)
  4. {
  5. int i,j,m,k=0;
  6. if(n%2==0) m=n/2;
  7. else m=n/2+1;
  8. for(i=0;i<m;i++)
  9. {
  10. for(j=i;j<n-i;j++)
  11. {
  12. k++;
  13. a[i][j]=k;
  14. }
  15. for(j=i+1;j<n-i;j++)
  16. {
  17. k++;
  18. a[j][n-i-1]=k;
  19. }
  20. for(j=n-i-2;j>=i;j--)
  21. {
  22. k++;
  23. a[n-i-1][j]=k;
  24. }
  25. for(j=n-i-2;j>=i+1;j--)
  26. {
  27. k++;
  28. a[j][i]=k;
  29. }
  30. }
  31. }
  32. int main()
  33. {
  34. int num,i,j;
  35. scanf("%d",&num);
  36. int a[MAX_SIZE][MAX_SIZE];
  37. func(a,num);
  38. for(i=0;i<num;i++)
  39. {
  40. for(j=0;j<num;j++) printf("%3d ",a[i][j]);
  41. printf("\n");
  42. }
  43. return 0;
  44. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注