向 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;
}
我有一个包含数字的字符数组。
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;
}