【问题标题】:How to add a number to a string at the end in a c program?如何在 c 程序中将数字添加到字符串的末尾?
【发布时间】:2014-09-08 18:20:25
【问题描述】:

我需要编写一个函数,它将一个字符串作为输入并输出如下

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);
}

【问题讨论】:

  • 显示一些代码,你得到了什么,什么不起作用。
  • c string and int concatenation 的可能重复项
  • 请发表你到目前为止所做的事情
  • 为什么要存储,只要求输出?
  • @Pieter21 :我怎样才能输出它?您是否建议只打印字符和数字,而不是将其存储在缓冲区中并一次打印整个字符串?

标签: c


【解决方案1】:

您可以自己实现itoa。逻辑如下:

  • 如果数字为零,则附加零(在您的情况下,这永远不会发生,但在一般情况下,这显然是可能的)
  • 为您的输出准备一个临时缓冲区。大小取决于您要打印的整数中的位数
  • 通过计算n % 10 存储最后一位数字
  • 使用整数除法将数字除以十
  • 继续最后三个步骤,直到剩余部分为零
  • 将反转的数字序列从临时缓冲区附加到您的输出

这只是实现逻辑的一种方式。其他方法也是可能的 - 例如,您可以构建一个 10 次幂的查找表,并使用整数除法和取余数的组合来计算每个数字。

【讨论】:

    【解决方案2】:

    你需要的所有代码,用 cmets 装饰:

    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 */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多