编辑代码

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

int* generateRange(char* code) {
    int start, end;
    sscanf(code, "%d-%d", &start, &end); // 解析字符串获取起始和结束数值

    int size = end - start + 1;
    int* result = (int*)malloc(size * sizeof(int)); // 动态分配数组内存

    for (int i = 0; i < size; i++) {
        result[i] = start + i; // 将起始和结束之间的整数存入数组
    }

    return result;
}

char *strReplace(char *str, char *oldstr, char *newstr)
{
  int j = 0;
  char bstr[strlen(str)+10];  // 转换缓冲区

  memset(bstr, 0, sizeof(bstr));
  for (j = 0; j < strlen(str); j++)
  {
    if (!strncmp(str + j, oldstr, strlen(oldstr)))
    {  // 查找目标字符串
      strcat(bstr, newstr);
      j += strlen(oldstr) - 1;
    }
    else
    {
      strncat(bstr, str + j, 1);  // 保存一字节进缓冲区
    }
  }

  strcpy(str, bstr);
  return str;
}
int GetAimNum(char* str, char aim)
{
	int str_len = strlen(str);
	int count = 0;
	for (int i = 0; i < str_len; i++)
	{
		if (*str == aim)
			count++;
		str++;
	}
	return count;
}

void Replace(char* str, char *oldchar, char* newstr)
{
	int i = strlen(str);//i指向有效字符串的位置即'\0'字符前
	int newstr_len = strlen(newstr);//求取 替换字符串 的有效长度
	int count = GetAimNum(str, oldchar);//获取字符串中的替换字符长度
	int j = i + count * (newstr_len - 1);
	//j指向末尾字符加要替换字符数乘(替换字符串长度-1)
	while (i >= 0)//如果i小于0说明已经遍历整个字符串
	{
		if (str[i] != oldchar)//如果i下标对于的字符不是要替换的字符就将它向后移
		{
			str[j--] = str[i--];
		}
		else//如果是就用替换字符串替换要替换字符
		{
			for (int z = newstr_len - 1; z >= 0; z--)
			{
				str[j--] = newstr[z];
			}
			i--;
		}
	}
}

int main() {
    char code[64] = "1234%567%%89";
    char code2[] = "ffff";
    // int* range = generateRange(code);
    char buffer[64] = {0};
    Replace(code, '%', "%%");
    printf("code=%s\n", code);
    // int a = 4, b = 6;
    // swap_int1(a,b);
    // print("a=%d, b=%d\n", a, b);
    // int size = 20 - 10 + 1;
    // for (int i = 0; i < size; i++) {
    //     printf("%d ", range[i]);
    // }

    // free(range); // 释放动态分配的数组内存

    return 0;
}