33,008
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
char* IntToChar(char* a, int i)
{
int k=1;
stack<char> s;
while(i>=10)
{
s.push(i%10+'0');
i = i/10;
k++;
}
s.push(i+'0');
for(;k>0;--k)
{
*a++ = s.top();
s.pop();
}
return a;
}
char* ChangeString(char* a)
{
if(a == NULL) return NULL;
char* b = new char[strlen(a)];
char* rt = b;
int i = 1;
while(*a != '\0')
{
if(*a == *(a+1))
{
++i;
}
else
{
if(i != 1)
{
b = IntToChar(b, i);
*b++ = *a;
}
else
*b++ = *a;
i = 1;
}
a++;
}
*b = '\0';
return rt;
}
int main()
{
char a[] = "aaaaaaaaaaaaaaabcddddddde";
cout<<ChangeString(a)<<endl;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
struct result{
char alpha; //这个用来保存你正在统计数量的那个字符
int count; //这是该字符出现的次数
struct result *next; //指向下一个统计结果的指针
};
int main(){
char input[256]; //要压缩的串
char temp; //当前统计的字符
int i,cnt; //输入串的指示器和重复次数的计数器
struct result *head,*fence,*p; //链表指针
//输入压缩串以及初始化变量
scanf("%s",&input);
if('\0' == input[0])
return 0;
temp=input[0];
i=1,cnt=1;
head = (struct result*)malloc(sizeof(struct result));
fence = head;
head->alpha = temp;
//开始压缩
while(input[i]!='\0'){
if(temp != input[i]){
//更新重复的个数
fence->count = cnt;
//开辟下一个链表成员
p =(struct result*)malloc(sizeof(struct result));
fence->next = p;
fence = fence->next;
fence->alpha = input[i];
fence->next = NULL;
//中间变量复位
temp = input[i];
cnt = 1;
p=NULL;
}//if
else{
cnt++;
}//else
i++;
}//while
fence->count = cnt; //更新最后一个字符的重复次数
//显示压缩结果
printf("\n源字符串:%s",input);
printf("\n压缩后的字符串:");
p=head;
while(p!=NULL){
if(p->count == 1)
printf("%c",p->alpha);
else
printf("%d%c",p->count,p->alpha);
p=p->next;
}
putchar('\n');
return 0;
}//main
#include <stdio.h>
#include <stdlib.h>
struct result{
char alpha; //这个用来保存你正在统计数量的那个字符
int count; //这是该字符出现的次数
struct result *next; //指向下一个统计结果的指针
};
int main(){
char input[256]; //要压缩的串
char temp; //当前统计的字符
int i,cnt; //输入串的指示器和重复次数的计数器
struct result *head,*fence,*p; //链表指针
//输入压缩串以及初始化变量
scanf("%s",&input);
if('\0' == input[0])
return 0;
temp=input[0];
i=1,cnt=1;
head = (struct result*)malloc(sizeof(struct result));
fence = head;
head->alpha = temp;
//开始压缩
while(input[i]!='\0'){
if(temp != input[i]){
//更新重复的个数
fence->count = cnt;
//开辟下一个链表成员
p =(struct result*)malloc(sizeof(struct result));
fence->next = p;
fence = fence->next;
fence->alpha = input[i];
fence->next = NULL;
//中间变量复位
temp = input[i];
cnt = 1;
p=NULL;
}//if
else{
cnt++;
}//else
i++;
}//while
fence->count = cnt; //更新最后一个字符的重复次数
//显示压缩结果
printf("\n源字符串:%s",input);
printf("\n压缩后的字符串:");
p=head;
while(p!=NULL){
if(p->count == 1)
printf("%c",p->alpha);
else
printf("%d%c",p->count,p->alpha);
p=p->next;
}
putchar('\n');
return 0;
}//main
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string compress(string& str)
{
int size = (int)str.size();
if (size == 0) return "";
ostringstream stream;
int num = 1;
for (int i = 1; i < size; i++) {
if (str[i] != str[i-1]) {stream << num << str[i-1]; num=1;}
else num++;
}
stream << num << str[size-1];
return stream.str();
}
int main()
{
cout << compress(string("rrttttttwwqrtttt")) << endl;
}