1、 编写函数计算字符串中子串出现的次数,如“abcdefabcdefabcdef”中出现子串“cde”三次(不允许使用标准库函数子串查找功能)。主函数实现输入字符串、输出字符串以及调用计算子串出现次数函数步骤。 2、 编写函数实现以下功能:有n个整数,使其前面各数顺序向后移m个位置,直至最后m个数变成最前面的m个数。主函数实现输入整数、输出整数及调用整数移位函数步骤。 麻烦写一下代码注释,如果有运算截图更好。麻烦会的帮帮忙,非常感谢!!!! |
|
20分 |
必须给你解决它:
第一题 #include <stdio.h> #include <string.h> int *next; void setNext(char *p, int *next) { int j, k, len; len = strlen(p); j = 1; next[0] = -1; while (j < len) { k = next[j - 1]; while (k >= 0 && p[j - 1] != p[k]) k = next[k]; if (k >= 0) next[j] = k + 1; else next[j] = 0; j++; } } int kmp(char *t, char *p) { if (NULL == t || NULL == p) return -1; int len1, len2, r; len1 = strlen(t), len2 = strlen(p); len1 = strlen(t); len2 = strlen(p); if (len1 >= len2) { int i, j, k; i = j = -1; k = len1 - len2; while (i <= k && j < len2) { if (-1 == j || t[i] == p[j]) { i++; j++; } else j = next[j]; } if (len2 == j) return i - j; else return -1; } return -1; } int main(void) { int count = 0; char t[] = "abcdefabcdefabcdef"; char p[] = "cde"; int lenp = strlen(p); next = malloc(sizeof(int)*lenp); setNext(p, next); char *q = t; while (-1 != kmp(q, p)) { q += strlen(p); count++; } printf("字符串%s在字符串%s中出现的次数是%d\n", p, t, count); free(next); return 0; } |
20分 |
第二题
#include <stdio.h> void print(int *arr, int n) { int i; for (i = 0; i < n; i++) printf("%3d", arr[i]); printf("\n"); } int main(void) { int arr[] = { 1,2,3,4,5 }; int n = sizeof(arr) / sizeof(int); print(arr, n); int m = 2; //把后m个数移动到前面 int i, j; i = n - 1, j = n - 1 - m; int t = arr[i]; while (j != n - 1) { arr[i] = arr[j]; i = j; j = (j - m + n) % n; } arr[i] = t; print(arr, n); return 0; } // 1 2 3 4 5 // 4 5 1 2 3 |
非常感谢!!!!!! |
|
java的好简单
HashMap<String, Integer> map = new HashMap<>(); String key; for (int i = 0; i < str.length(); i++) { for(int j=i+1;j<str.length();j++){ key = str.substring(i,j); if(!map.containsKey(key)){ map.put(key, 1); }else{ map.put(key, map.get(key)+1); } } |