c语言实现删除字符使字符串变好
时间: 2023-03-27 14:00:46 浏览: 86
你可以使用指针和循环来实现删除字符使字符串变好。具体步骤如下:
1. 定义一个指针指向字符串的首地址。
2. 使用循环遍历字符串中的每个字符,如果字符不是要删除的字符,则将该字符复制到新的字符串中。
3. 如果字符是要删除的字符,则跳过该字符,不将其复制到新的字符串中。
4. 最后将新的字符串末尾添加一个'\',表示字符串的结束。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
void delete_char(char *str, char c) {
char *p = str;
char *new_str = str;
while (*p != '\') {
if (*p != c) {
*new_str++ = *p;
}
p++;
}
*new_str = '\';
}
int main() {
char str[100] = "hello world";
char c = 'l';
printf("原字符串:%s\n", str);
delete_char(str, c);
printf("删除字符'%c'后的字符串:%s\n", c, str);
return ;
}
```
输出结果为:
```
原字符串:hello world
删除字符'l'后的字符串:heo word
```
相关问题
c语言实现小写字符串变大写,输出结果倒置
好的,以下是实现方式:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int len, i;
// 读入字符串
printf("请输入一个字符串:");
scanf("%s", str);
// 将字符串中的小写字母转换为大写字母
len = strlen(str);
for (i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] -= 32;
}
}
// 输出结果倒置
printf("结果倒置为:");
for (i = len - 1; i >= 0; i--) {
printf("%c", str[i]);
}
return 0;
}
```
执行结果示例:
```
请输入一个字符串:hello
结果倒置为:OLLEH
```
c语言实现哈夫曼算法编译器,实现输入任意字符串以及相关概率,输出译码结果
好的,这是一个比较复杂的问题,需要分多个步骤来实现。我会尽力解答,但是由于长度限制,可能无法提供完整的代码实现,还请谅解。
首先,需要了解哈夫曼编码的基本原理。哈夫曼编码是一种变长编码方式,将出现频率较高的字符用较短的编码表示,出现频率较低的字符用较长的编码表示,以达到压缩数据的目的。在哈夫曼编码中,使用哈夫曼树来表示每个字符的编码。
接下来,我们可以按照以下步骤来实现哈夫曼编译器:
1. 定义一个结构体来表示每个字符及其出现的概率:
```
typedef struct {
char ch; // 字符
float prob; // 出现概率
char code[256]; // 哈夫曼编码
} HuffmanNode;
```
2. 编写一个函数来统计输入字符串中每个字符出现的概率,并将结果存储在一个数组中:
```
void calc_prob(char *str, HuffmanNode *nodes, int *count) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
char ch = str[i];
count[ch]++;
}
for (int i = 0; i < 256; i++) {
if (count[i] > 0) {
nodes[*num_nodes].ch = i;
nodes[*num_nodes].prob = (float)count[i] / len;
(*num_nodes)++;
}
}
}
```
3. 构建哈夫曼树,按照字符出现概率从小到大排序,并将概率较小的字符作为叶子节点,概率较大的字符作为根节点:
```
void build_tree(HuffmanNode *nodes, int num_nodes) {
for (int i = 0; i < num_nodes - 1; i++) {
int min1 = -1, min2 = -1;
for (int j = 0; j < num_nodes; j++) {
if (nodes[j].parent == -1) {
if (min1 == -1 || nodes[j].prob < nodes[min1].prob) {
min2 = min1;
min1 = j;
} else if (min2 == -1 || nodes[j].prob < nodes[min2].prob) {
min2 = j;
}
}
}
nodes[min1].parent = num_nodes + i;
nodes[min2].parent = num_nodes + i;
nodes[num_nodes + i].left = min1;
nodes[num_nodes + i].right = min2;
nodes[num_nodes + i].prob = nodes[min1].prob + nodes[min2].prob;
}
}
```
4. 根据哈夫曼树生成每个字符的哈夫曼编码:
```
void generate_code(HuffmanNode *nodes, int root, char *buffer, int depth) {
if (nodes[root].left == -1 && nodes[root].right == -1) {
buffer[depth] = '\0';
strcpy(nodes[root].code, buffer);
return;
}
buffer[depth] = '0';
generate_code(nodes, nodes[root].left, buffer, depth + 1);
buffer[depth] = '1';
generate_code(nodes, nodes[root].right, buffer, depth + 1);
}
```
5. 输入任意字符串,将每个字符编码,并输出译码结果:
```
void encode_string(char *str, HuffmanNode *nodes, int num_nodes) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
char ch = str[i];
for (int j = 0; j < num_nodes; j++) {
if (nodes[j].ch == ch) {
printf("%s", nodes[j].code);
break;
}
}
}
printf("\n");
}
```
以上是一个基本的哈夫曼编译器的实现步骤,具体实现细节还需要根据实际情况进行调整和完善。
阅读全文