C++自行编写strcmp
时间: 2023-12-02 16:41:15 浏览: 122
根据提供的引用内容,我们可以了解到评测机是用纯C++编写的,因此可以自行编写strcmp函数。下面是一个简单的strcmp函数的实现:
```c++
int my_strcmp(const char* str1, const char* str2) {
while (*str1 && *str2 && (*str1 == *str2)) {
str1++;
str2++;
}
return *str1 - *str2;
}
```
该函数的实现思路是:逐个比较两个字符串中的字符,如果相同则继续比较下一个字符,直到出现不同的字符或者到达字符串结尾。如果两个字符串完全相同,则返回0;如果str1大于str2,则返回正数;如果str1小于str2,则返回负数。
相关问题
使用C++编写一份代码,要求实现以下几点。 1. 自行收集英文文章,写入一个文本文档,起名 database.txt,作为基础测试数据。文件体积不小于 1M 。不要拷贝别人的测试数据。 建立一个待查关键字文件 query.txt ,存储待查询的单词或短语。 2. 建立哈希表:1个单词的哈希表,2个连续单词的哈希表,... ,最多5个连续单词(短语)的哈希表 3. 支持1个到5个单词(最多5个单词组成的短语)的查询 4. 输入查询的单词/短语,输出该代词或短语的出现次数,及每个出现位置的上下文(前一句,单词/短语所在的句子,下一句)
下面是C语言代码的一个示例,该代码实现了上述要求:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORDS 50000
#define MAX_WORD_LENGTH 50
#define MAX_PHRASE_LENGTH 255
struct HashTable {
char key[MAX_PHRASE_LENGTH];
int count;
int positions[MAX_WORDS];
};
int hash(char *str) {
int sum = 0;
for (int i = 0; i < strlen(str); i++) {
sum += str[i];
}
return sum % MAX_WORDS;
}
void insert_hash_table(struct HashTable *table, char *str, int pos) {
int h = hash(str);
while (table[h].count > 0 && strcmp(table[h].key, str) != 0) {
h = (h + 1) % MAX_WORDS;
}
if (table[h].count == 0) {
strcpy(table[h].key, str);
}
table[h].count++;
table[h].positions[table[h].count - 1] = pos;
}
int search_hash_table(struct HashTable *table, char *str) {
int h = hash(str);
while (table[h].count > 0 && strcmp(table[h].key, str) != 0) {
h = (h + 1) % MAX_WORDS;
}
if (table[h].count == 0) {
return -1;
} else {
return h;
}
}
void print_hash_table(struct HashTable *table) {
for (int i = 0; i < MAX_WORDS; i++) {
if (table[i].count > 0) {
printf("%s %d\n", table[i].key, table[i].count);
}
}
}
int main() {
char word[MAX_WORD_LENGTH];
char phrase[MAX_PHRASE_LENGTH];
int word_count = 0;
int phrase_counts[MAX_PHRASE_LENGTH];
memset(phrase_counts, 0, sizeof(phrase_counts));
FILE *fp = fopen("database.txt", "r");
if (fp == NULL) {
printf("Error: cannot open file database.txt\n");
return 1;
}
while (fscanf(fp, "%s", word) != EOF) {
word_count++;
for (int i = 1; i <= 5; i++) {
if (word_count >= i) {
int phrase_start = word_count - i;
int phrase_length = 0;
for (int j = phrase_start; j < word_count; j++) {
strcpy(phrase + phrase_
用C++程序设计:新建一个txt后缀的文本文档,里面有十行内容,每行前十个字符为姓名,后三个字符为成绩,自行输入。编程实现从键盘输入字符串姓名,判断文本文档里面有没有这个姓名,有就输出姓名和成绩,没有就输入“这个人不存在”。
好的,让我试试回答你的问题。首先,我明白你的要求是关于C程序的。因此,让我为你编写一个简单的C程序来实现你的要求。
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LENGTH 10
#define MAX_GRADE_LENGTH 3
int main() {
FILE *fp; // 文件指针
char name[MAX_NAME_LENGTH + 1]; // 存储输入的姓名
char grade[MAX_GRADE_LENGTH + 1]; // 存储读取到的成绩
char line[MAX_NAME_LENGTH + MAX_GRADE_LENGTH + 2]; // 存储读取到的一行数据
int found = 0; // 标记是否找到
// 新建文本文档
fp = fopen("student.txt", "w");
fprintf(fp, "John 100\n");
fprintf(fp, "Mary 90\n");
fprintf(fp, "Peter 80\n");
fprintf(fp, "David 85\n");
fprintf(fp, "Tom 92\n");
fprintf(fp, "Lucy 76\n");
fprintf(fp, "Jerry 88\n");
fprintf(fp, "Bob 79\n");
fprintf(fp, "Alice 94\n");
fprintf(fp, "Kate 87\n");
fclose(fp);
// 从键盘输入姓名
printf("请输入姓名:");
scanf("%s", name);
// 读取文本文档,查找是否存在该名称
fp = fopen("student.txt", "r");
while (fgets(line, sizeof(line), fp)) {
sscanf(line, "%s%s", name, grade);
if (strcmp(name, line) == 0) {
found = 1;
printf("姓名:%s,成绩:%s\n", name, grade);
break;
}
}
fclose(fp);
// 输出结果
if (!found) {
printf("这个人不存在。\n");
}
return 0;
}
```
使用方法:
1. 将上述代码保存为一个名为 `exam.c` 的文件;
2. 打开命令行终端;
3. 进入到保存该文件的目录下;
4. 输入以下命令进行编译(你需要先安装GCC编译器):
```bash
gcc exam.c -o exam
```
5. 编译成功后,输入以下命令运行程序:
```bash
./exam
```
6. 按照程序提示输入姓名,即可查询成绩。
阅读全文