void initializeKey(char *k) { int used[26] = {0}; int index = 0; char key[26]; printf("请输入加密密钥(不区分大小写):"); scanf("%s", key); for(int i = 0; i < strlen(key); i++) { char ch = toupper(key[i]); if(isalpha(ch) && used[ch - 'A'] == 0) { used[ch - 'A'] = 1; k[index] = ch; index++; } } for(int i = 0; i < 26; i++) { if(used[i] == 0) { k[index] = 'A' + i; index++; } } }j解释
时间: 2024-01-06 12:06:09 浏览: 43
这段代码定义了一个名为 "initializeKey" 的函数,该函数接受一个字符型指针作为参数。函数的作用是从用户输入中初始化一个加密密钥,并将其存储在指针 k 指向的位置。
函数内部定义了一个整型数组 used,用来记录字母是否已经被使用过。同时定义了一个整型变量 index 和一个字符型数组 key,用于存储加密密钥。
函数首先会提示用户输入加密密钥(不区分大小写),然后通过循环遍历输入字符串中的每个字符。对于每个字符,首先将其转换为大写字母,然后检查它是否是字母,并且是否已经被使用过。如果该字母未被使用过,则将其添加到加密密钥中,并将该字母在 used 数组中的对应位置标记为已使用,同时将 index 自增。
接下来的循环用于将未被使用过的字母添加到加密密钥中,直到加密密钥中包含了所有的 26 个字母为止。最终,加密密钥将被存储在指针 k 指向的位置。
相关问题
#include <stdio.h> #include "sqlite3.h" static int callback(void* NotUsed, int argc, char** argv, char** azColName) { int i; for (i = 0; i < argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char** argv) { sqlite3* db; char* zErrMsg = 0; int rc; char* dbfile = "test.db"; char* sql; rc = sqlite3_open(dbfile, &db); if (rc) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return -1; } //在数据库中创建一个名为person的表 sql = "create table person(id int primary key,first_name text,last_name text);"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sql = "insert into person values (1,'zhang','san');" "insert into person values (2,'li','si');" "insert into person values (3,'wang','wu');" "insert into person values (4,'zhao','liu');" "insert into person values (5,'sun','qi');"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sql = "select * from person where id=3;"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to select data: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sql = "delete from person where id=5;"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to delete data: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sql = "select * from person;"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); return 0; }添加注释
//引入头文件
#include <stdio.h>
#include "sqlite3.h"
//回调函数
static int callback(void* NotUsed, int argc, char** argv, char** azColName) {
int i;
for (i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
//主函数
int main(int argc, char** argv) {
sqlite3* db;
char* zErrMsg = 0;
int rc;
char* dbfile = "test.db";
char* sql;
rc = sqlite3_open(dbfile, &db); //连接数据库
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return -1;
}
sql = "create table person(id int primary key,first_name text,last_name text);";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //创建表
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sql = "insert into person values (1,'zhang','san');" "insert into person values (2,'li','si');" "insert into person values (3,'wang','wu');" "insert into person values (4,'zhao','liu');" "insert into person values (5,'sun','qi');";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //插入数据
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sql = "select * from person where id=3;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //查询数据
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to select data: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sql = "delete from person where id=5;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //删除数据
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to delete data: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sql = "select * from person;";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); //查询数据
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db); //关闭数据库连接
return 0;
}
C语言做一个随机生成20个字母 的字符串 然后按照这个字符串进行输入 当输入正确,就会原样打印输出,当输入错误就会打印* 20个输入结束之后,就会打印用时和正确率
首先,你需要定义一个随机字符串生成的函数,然后创建一个存储用户输入的字符串的数组。接着,你需要一个循环来接收用户的输入,并且在每次输入后对用户输入的字符与目标字符串中对应的字符进行比较,如果相同则保留该字符,不同则显示星号(*)。循环结束后,你可以计算用时和正确率。
下面是一个简单的示例代码,展示了如何实现这个程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define STRING_LENGTH 20
// 生成随机字符串
void generateRandomString(char *str) {
const char charset[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < STRING_LENGTH; i++) {
int key = rand() % (sizeof(charset) - 1);
str[i] = charset[key];
}
str[STRING_LENGTH] = '\0'; // 添加字符串结束符
}
// 比较并输出字符串
void compareAndPrintString(const char *str1, const char *str2) {
for (int i = 0; i < STRING_LENGTH; i++) {
if (str1[i] == str2[i]) {
printf("%c", str1[i]);
} else {
printf("*");
}
}
printf("\n");
}
int main() {
char correctString[STRING_LENGTH + 1];
char userInput[STRING_LENGTH + 1];
int matchCount = 0;
srand(time(NULL)); // 初始化随机数种子
// 生成并打印正确字符串
generateRandomString(correctString);
printf("正确字符串: %s\n", correctString);
clock_t start, end;
double cpu_time_used;
start = clock(); // 开始计时
// 获取用户输入
for (int i = 0; i < STRING_LENGTH; i++) {
printf("请输入第 %d 个字符: ", i + 1);
scanf(" %c", &userInput[i]); // 注意前面有一个空格,用于忽略前面的换行符
if (userInput[i] == correctString[i]) {
matchCount++;
}
}
end = clock(); // 结束计时
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
// 比较并输出结果
compareAndPrintString(correctString, userInput);
// 输出用时和正确率
printf("用时: %f 秒\n", cpu_time_used);
printf("正确率: %d%%\n", (matchCount * 100) / STRING_LENGTH);
return 0;
}
```
在上面的代码中,我们定义了一个`generateRandomString`函数来生成随机字符串,一个`compareAndPrintString`函数来比较和打印字符串,以及一个`main`函数来处理整个程序的逻辑。
阅读全文