[cpp]
/************************************************************************
轉換字符串格式為原來字符串裡的字符+該字符連續出現的個數,
例如:1233422222 轉換為1121324125(1出現1次,2出現1次,3出現2次......
*************************************************************************/
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
void convert(char input[],char output[])
{
int count = 1;
char *fast = input;
char *slow = input;
while(*(++fast)!='\0')
{
if(*fast == *slow)//如果當前讀入的字符和正在統計的一樣,那麼出現次數要++
{
count++;
continue;
}
// 當快慢指針不同時就執行下邊語句
if(slow<fast) //注意不能寫成while 形式 因為要求重復的數字只出現一次
{
*output++=*slow++;
}
*output++=count+'0'; //將出現次數添加至數字後邊
slow = fast; // 慢指針指向快指針 重新統計
count = 1; //計數器重置為初始值
}
*output++=*slow; // 快指針跳出循環時慢指針仍沒有跳出循環但是count計數正確
*output++=count+'0';//因為讀到'\0'循環退出,最後一個連續的字符序列沒有輸出,所以在這裡追加輸出
*output='\0';
}
int main()
{
char input[]="1233422222";
char output[30]={0};
convert(input,output);
cout<<"output is "<<output<<endl;
}