抄袭检测程序 功能要求: 给定两个字符长度为1000的字符串,对A字符串的内容进行抄袭检测。如果发现A字符与B字符中连续6个字符相同,则统计抄袭字数为6,当全部检测完毕后,统计出抄袭字数占A字符的比率; 显示所有抄袭部分文字; 要求使用两种不同的方法进行处理;用C语言数据结构
时间: 2023-12-14 19:36:10 浏览: 48
C语言程序设计-分别统计字符串中字母、数字、空格和其他字符出现的次数(字符长度小于80);.c
5星 · 资源好评率100%
方法一:暴力匹配
1. 确定字符串A和字符串B。
2. 从字符串A中选取连续的6个字符,逐一与字符串B中的所有6个字符进行比较,如果相同则计数器加1。
3. 统计抄袭字数占A字符的比率。
4. 显示所有抄袭部分文字。
C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000
int main()
{
char strA[MAX_LENGTH + 1], strB[MAX_LENGTH + 1];
int count = 0;
float rate;
printf("请输入字符串A:");
gets(strA);
printf("请输入字符串B:");
gets(strB);
printf("抄袭部分如下:\n");
for (int i = 0; i < strlen(strA) - 5; i++) {
for (int j = 0; j < strlen(strB) - 5; j++) {
if (strncmp(strA + i, strB + j, 6) == 0) {
count++;
printf("%.*s\n", 6, strA + i);
}
}
}
rate = (float)count / strlen(strA);
printf("抄袭字数占比:%.2f%%\n", rate * 100);
return 0;
}
```
方法二:哈希表
1. 确定字符串A和字符串B。
2. 使用哈希表存储B字符串中所有连续6个字符的哈希值。
3. 遍历A字符串中所有连续6个字符的哈希值,如果在哈希表中找到相同的哈希值,则计数器加1。
4. 统计抄袭字数占A字符的比率。
5. 显示所有抄袭部分文字。
C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000
#define HASH_SIZE 10007
unsigned int hash(char* str)
{
unsigned int h = 0;
for (int i = 0; i < 6; i++) {
h = h * 31 + str[i];
}
return h % HASH_SIZE;
}
int main()
{
char strA[MAX_LENGTH + 1], strB[MAX_LENGTH + 1];
int count = 0;
float rate;
int hashTable[HASH_SIZE] = {0};
printf("请输入字符串A:");
gets(strA);
printf("请输入字符串B:");
gets(strB);
for (int i = 0; i < strlen(strB) - 5; i++) {
int h = hash(strB + i);
hashTable[h] = 1;
}
printf("抄袭部分如下:\n");
for (int i = 0; i < strlen(strA) - 5; i++) {
int h = hash(strA + i);
if (hashTable[h] == 1 && strncmp(strA + i, strB + i, 6) == 0) {
count++;
printf("%.*s\n", 6, strA + i);
}
}
rate = (float)count / strlen(strA);
printf("抄袭字数占比:%.2f%%\n", rate * 100);
return 0;
}
```
阅读全文