1、实现字符串转数字。
在C语言中,可以使用库函数atoi()
将字符串转换为整数。该函数接受一个字符串作为参数,并返回对应的整数值。以下是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "12345";
int num = atoi(str);
printf("The integer value of \"%s\" is %d\n", str, num);
return 0;
}
运行结果:
The integer value of "12345" is 12345
如果要将字符串转换为其他类型的数字,可以使用相应的库函数,例如atof()
用于将字符串转换为浮点数。
2、实现字符串的排序。
以下是使用C语言实现字符串排序的示例代码:
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100 // 字符串最大长度
int main() {
char strings[10][MAX_LENGTH]; // 存储待排序字符串的数组
char temp[MAX_LENGTH]; // 用于交换字符串的临时数组
int n, i, j;
char *p;
printf("请输入待排序字符串的数量:");
scanf("%d", &n);
printf("请输入%d个待排序字符串:\n", n);
for (i = 0; i < n; i++) {
scanf("%s", strings[i]);
}
// 使用冒泡排序对字符串进行排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
p = strings[j];
if (strcmp(strings[j+1], p) < 0) {
strcpy(temp, p);
strcpy(p, strings[j+1]);
strcpy(strings[j+1], temp);
}
}
}
// 输出排序后的字符串
printf("排序后的字符串为:\n");
for (i = 0; i < n; i++) {
printf("%s\n", strings[i]);
}
return 0;
}
在上述代码中,我们首先定义了一个二维字符数组strings
,用于存储待排序的字符串。然后,我们使用scanf()
函数从标准输入中读入待排序的字符串,并将它们存储到strings
数组中。接下来,我们使用冒泡排序对字符串进行排序,排序时使用strcmp()
函数比较字符串的大小。最后,我们输出排序后的字符串。
3、实现字符串的查找。
以下是使用C语言实现字符串查找的示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char str[100], sub[20];
int i, pos;
printf("请输入要查找的字符串:");
fgets(str, 100, stdin);
printf("请输入要查找的子字符串:");
fgets(sub, 20, stdin);
pos = strstr(str, sub);
if (pos == NULL) {
printf("未找到子字符串!\n");
} else {
printf("子字符串在主字符串中的位置为:%d\n", pos);
}
return 0;
}
在上述代码中,我们首先定义了两个字符数组str
和sub
,分别用于存储主字符串和待查找的子字符串。然后,我们使用fgets()
函数从标准输入中读入这两个字符串。接着,我们使用strstr()
函数在主字符串中查找子字符串,如果找到了,则返回子字符串在主字符串中的位置;否则返回NULL
。最后,我们根据返回值输出查找结果。
4、实现数字的加密和解密。
以下是一个简单的C语言程序,用于实现数字的加密和解密。该程序使用简单的替换算法,将数字0-9分别替换为它们的平方根(取整数部分),即0-9分别替换为0-3、5-9。加密和解密的过程实际上就是这种替换的逆操作。
#include <stdio.h>
#include <math.h>
int main() {
int num, encrypted, decrypted;
printf("请输入要加密的数字:");
scanf("%d", &num);
encrypted = encrypt(num);
printf("加密后的数字为:%d\n", encrypted);
decrypted = decrypt(encrypted);
printf("解密后的数字为:%d\n", decrypted);
return 0;
}
int encrypt(int num) {
int encrypted = 0;
while (num > 0) {
int digit = num % 10;
encrypted = encrypted * 10 + sqrt(digit) - 1;
num /= 10;
}
return encrypted;
}
int decrypt(int encrypted) {
int num = 0, sqrt_val;
while (encrypted > 0) {
int digit = encrypted % 10;
sqrt_val = sqrt(digit + 1);
num = num * 10 + sqrt_val % 10;
encrypted /= 10;
}
return num;
}
该程序中的encrypt函数和decrypt函数分别用于加密和解密数字。encrypt函数将输入的数字按位拆分,将每个数字的平方根(取整数部分)作为新的数字,再将这些数字按原来的顺序拼接起来作为加密后的数字。decrypt函数则是encrypt函数的逆操作,将加密后的数字按位拆分,计算出每个数字的平方根(取整数部分)的逆运算,再将这些数字按原来的顺序拼接起来作为解密后的数字。
5、实现链表中节点的删除。
在C语言中,链表是一种常见的数据结构。链表中的每个节点都包含数据和指向下一个节点的指针。删除节点需要找到该节点,然后断开它与其前一个节点的连接,同时更新它前一个节点的连接,使其指向当前节点的下一个节点。
以下是一个简单的示例,说明如何在C语言中删除链表中的节点:
首先,定义链表节点的结构:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
然后,创建一个函数来删除链表中的节点:
Node* deleteNode(Node* head, int key) {
// 如果头节点为空,或者头节点的数据就是关键字,那么直接返回NULL
if (head == NULL || head->data == key) {
return head;
}
// 找到前一个节点
Node* prev = head;
while (prev->next != NULL && prev->next->data != key) {
prev = prev->next;
}
// 如果关键字不在链表中,返回原始链表
if (prev->next == NULL) {
return head;
}
// 断开当前节点与前一个节点的连接,并释放当前节点的内存空间
Node* temp = prev->next;
prev->next = temp->next;
free(temp);
return head;
}
这个函数首先检查头节点是否为空或者头节点的数据是否为关键字。如果是,那么它直接返回NULL,因为删除头节点或者空链表是没有意义的。然后,它遍历链表,找到与关键字匹配的节点的前一个节点。最后,它断开当前节点与前一个节点的连接,并释放当前节点的内存空间。