向 char 数组中插入一个字符

Inserting a character into a char array

我有一个包含数字的字符数组。

char number[] = "12000000"

我需要一个函数来 插入 每 3 位分隔符。喜欢:

char result[] = "12,000,000"

我的函数接受数字作为 char pointer,它也需要 return 结果作为 char pointer

  char* insert_divider(char* number) {

    some magic;
    return result;
  } 

我不知道如何使用指针。谢谢。

这里有一个函数,它从末尾开始每 num 个字符添加 char c。您需要确保字符串缓冲区足够长以容纳修改后的字符串。

char *addEvery(char *str, char c, unsigned num)
{
    char *end = str;

    if(str && *str && num)
    {
        size_t count = 1;
        while(*(end)) end++;
        while(end != str)
        {
            end--;
            count++;
            if(!(count % (num + 1)) && str != end)
            {
                memmove(end + 1, end, count);
                *end = c;
                count++;
            }
        }
    }
    return str;
}

int main(void)
{
    char str[100] = "120000000000";
    printf("%s", addEvery(str,',',3));
}

我想到了这段代码:

  char *result;
  result = (char*) malloc(15);
  int len= strlen(input);
  uint8_t cursor= 0;
  for(int i = 0; i < len; i++) {
    if ((len- i) > 0 && (len- i) % 3 == 0) {
      result[i + cursor] = ',';
      cursor++;
    }
    result[i + cursor] = input[i];
  }
  result[len+ cursor] = '[=10=]';

感谢大家的帮助和建议。

这是另一种方法:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* insert_divider(char* number, size_t length) {
    int j = length + length/3; // every 3 digits a ',' will be inserted
    char *out = (char*)malloc(j + 1);

    out[j--] = '[=10=]';

    for (int i = length - 1, k = 1; i >= 0; i--, k++) {
        out[j--] = number[i];
        if ((k%3) == 0) {
            out[j--] = ',';
        }
    }

    return out;
}

int main(){
    char number[] = "12000000";
    char *outNumber = insert_divider(number, strlen(number));
    printf("%s", outNumber);
    free(outNumber);
    return 0;
}