我需要编写一个函数,它将字符串作为输入并输出如下
input : aaabbdd
output : a3b2d2
input : aaaaaaaaaaaaaaaabbccc
output : a16b2c3
基本上我必须将计数附加到每个角色。我不应该使用itoa()将int转换为字符串
我写了逻辑。但我很惊讶将数字附加到字符串上。例如,如果count为16,我如何将数字16添加到字符串的结尾?
我的逻辑如下所示。
#include <stdio.h>
void str1(char *str)
{
int i, j, cnt;
int len = strlen(str);
char *nstr = (char *) malloc(len * sizeof(char));
int k = 0;
cnt = 1;
for(i = 0, j = 1; i < len - 1;)
{
if(str[i] == str[j])
{
j++;
cnt++;
continue;
}
else
{
if(cnt == 1)
{
nstr[k++] = str[i];
}
else
{
nstr[k++] = str[i];
nstr[k++] = cnt; // GOT STUCK HERE
}
i = j;
j = i + 1;
cnt = 1;
}
}
printf("\n%s\n", nstr);
}
main()
{
char str[] = "aaaaaaaaaaaaaaaabbcdd";
str1(str);
}
答案 0 :(得分:1)
您可以自己实施itoa
。逻辑如下:
n % 10
这只是实现逻辑的一种方式。其他方式也是可能的 - 例如,您可以构建一个10的幂的查找表,并使用整数除法和余数的组合计算每个数字。
答案 1 :(得分:1)
您需要的所有代码,用评论装饰:
if (len == 0) return;
/* initialize */
char c = str[0];
int count = 1;
/* include terminating '\0', and that will resolve itself! */
for (i = 1; i <= len; i++)
{
if (str[i] == str[i-1])
{
/* continue sequence */
count++;
}
else
{
/* end sequence */
printf("%c%d", c, count);
/* start new sequence */
c = str[i]; count = 1;
}
}
printf("\n"); /* flush buffer */