我有一個大字符串char myStr =「AAAABBBCCCCCCDDDEFGHHIJJ」。 我將這個字符串傳遞給我的字符串壓縮函數,它應該返回以下格式的字符串myStr =「A4B3C6D3EFGH2IJ2」 此外,新字符串替換應該只發生在相同的傳遞字符串中。一個不能創建一個臨時數組。如何壓縮一個字符串並用C的計數替換重複項?
下面是我的func,我無法找出刪除重複項並用相同字符串中的數字替換。
#include<stdio.h>
#include<string.h>
char* StrCompress(char myStr[])
{
char *s = myStr;
int len = strlen(myStr);
char *in = myStr;
int count =0;
int i=0;
while(*(s) != '\0')
{
if(*(s)==*(s+1))
{
count++;
if(count == 1)
{
in = s;
}
s++;
}
else
{
//myStr[count-1]=count;
memcpy(in+1,s+1,count);
s=in;
count =0;
}
i++;
}
return myStr;
}
int main(){
char myStr[] ="AAAABBBCCCCCEEFGIIJJJKLMNNNNOOO";
printf("Compressed String is : %s\n",StrCompress(&myStr));
return 0;
}
它看起來像你想執行[遊程編碼(RLE)(http://en.wikipedia.org/wiki/Run -length_encoding),但計數+數據元組反轉。那是對的嗎?另外,我們可以假定你的字符串從來沒有數字,因爲它們會完全使用你的算法? – WhozCraig