字符串压缩c语言
时间: 2023-06-21 18:07:32 浏览: 271
以下是一个简单的字符串压缩的 C 语言实现:
```c
#include <stdio.h>
#include <string.h>
void compress(char *str) {
int len = strlen(str);
char compressed[len];
int count = 1, j = 0;
for(int i = 0; i < len; i++) {
if(str[i] == str[i+1]) {
count++;
} else {
compressed[j++] = str[i];
compressed[j++] = count + '0';
count = 1;
}
}
compressed[j] = '\0';
printf("Compressed string: %s\n", compressed);
}
int main() {
char str[100];
printf("Enter a string: ");
scanf("%s", str);
compress(str);
return 0;
}
```
该程序从标准输入中获取一个字符串,并将其压缩为“字符+出现次数”的形式。例如,`aaabbbc`压缩后变为`a3b3c1`。
相关问题
字符串压缩C语言指针函数
下面是一个简单的字符串压缩 C 语言指针函数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* compress(char* str) {
int len = strlen(str);
if (len < 2) {
return str;
}
char* result = (char*) malloc(len + 1);
int count = 1;
char last = str[0];
int j = 0;
for (int i = 1; i <= len; i++) {
if (str[i] == last) {
count++;
} else {
result[j++] = last;
if (count > 1) {
char buf[16];
sprintf(buf, "%d", count);
int k = 0;
while (buf[k] != '\0') {
result[j++] = buf[k++];
}
count = 1;
}
last = str[i];
}
}
result[j] = '\0';
return result;
}
int main() {
char str[] = "abbccccccde";
char* result = compress(str);
printf("%s\n", result);
free(result);
return 0;
}
```
该函数接受一个指向字符串的指针,并返回压缩后的字符串。函数的实现过程是遍历字符串,计算连续相同字符的数量,将字符和数量存储在一个新的字符串中。如果字符只出现一次,则只存储该字符,否则存储字符和数量。最后,返回压缩后的字符串指针。
使用该函数的示例代码在主函数中给出。运行该程序将输出 "ab2c6de",即字符串 "abbccccccde" 的压缩形式。注意,在使用完返回的字符串指针后,应该释放内存以避免内存泄漏。
字符串压缩解压c语言
根据提供的引用内容,我们可以了解到这是一道关于字符串压缩解压的C语言题目。下面是对该问题的回答:
1. 字符串压缩
```c
#include <stdio.h>
#include <string.h>
int main()
{
char c;
char str[1001];
int count = 1;
scanf("%c\n", &c);
fgets(str, 1001, stdin);
if (c == 'C')
{
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == str[i + 1])
{
count++;
}
else
{
if (count > 1)
{
printf("%d", count);
}
printf("%c", str[i]);
count = 1;
}
}
}
return 0;
}
```
2. 字符串解压
```c
#include <stdio.h>
#include <string.h>
int main()
{
char c;
char str[1001];
int count = 0;
scanf("%c\n", &c);
fgets(str, 1001, stdin);
if (c == 'D')
{
for (int i = 0; i < strlen(str); i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
count = count * 10 + str[i] - '0';
}
else
{
if (count == 0)
{
printf("%c", str[i]);
}
else
{
for (int j = 0; j < count; j++)
{
printf("%c", str[i]);
}
count = 0;
}
}
}
}
return 0;
}
```
阅读全文