如何通过检查分隔符在字符串中添加一个字符?

How to add a character in a string by checking the delimiter?

我的程序中有一个字符串需要在“/”之前用另一个字符串值进行更改。

源字符串:qos-tree/output_rate 目标字符串:qos-tree-2/output_rate

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

void append(char* s, char c)
{
        int len = strlen(s);
        s[len] = c;
        s[len+1] = '[=10=]';
}

int main(void)
{
        char str[256] = "qos-tree/output_rate";
        char c = "a";

        append(str, c);

        printf("%s\n", str);
        return 0;
}

这是我到目前为止所做的,我认为逻辑是错误的here.Can谁能指导我更正它? 执行完成后,源字符串在“/”

之前应该有一个“-2”

在您的尝试中,您没有寻找斜杠,而且我在任何地方都没有看到任何“-2”。

试试这个:

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

void append(char* s, char del, char* substring) {
  char origin[256];
  strcpy(origin, s);
  int i = 0, j = 0, z = 0;

  for(; origin[i]; ++i) {
    if(origin[i] != del) {
      s[j++] = origin[i];
    } else {
      for(; substring[z]; ++z) {
        s[j++] = substring[z];
      }
      s[j++] = origin[i];
    }
  }
  s[j] = '[=10=]';
}

int main(void) {
  char str[256] = "qos-tree/output_rate";
  char del = '/';
  char* substring = "-2";

  append(str, del, substring);

  printf("%s\n", str);
  return 0;
}

逻辑是在函数内部我们使用origin数组来记住数组的实际内容,然后我们从origin复制到s(这是实际的数组main())。如果我们找到分隔符 del,那么我们复制那个位置的 substring 并继续复制。


注意数组的长度应该足以存储结果字符串。在这种情况下,它是。

void insert_before_ch(char *s, const char *ins, char c){
    char *p = strchr(s, c);
    if(p){
        size_t len = strlen(ins);
        memmove(p + len, p, strlen(p)+1);
        memcpy(p, ins, len);
    }
}

int main(void){
    char str[256] = "qos-tree/output_rate";

    insert_before_ch(str, "-2", '/');

    printf("%s\n", str);
    return 0;
}

首先这个 char c = "a" 应该替换成这个 char c = 'a'; 因为 c 是一个字符而不是字符串

至于你的问题,我没有真正看到你的代码正在做什么与你说你想做什么之间的关系,但这里有一段代码可以实现你想做的事情:

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




void append(char* str , char c)
{
    char firststr[60];
    char therest[30];
    strcpy(firststr , strtok(str , "/"));
    strcpy(therest , strtok(NULL , "/"));
    strcat(firststr , &c);
    strcat(firststr , "/");
    strcat(firststr , therest);
    strcpy(str , firststr);
}
int main(void)
{
    char str[60] = "qos-tree/output_rate";
    char c = '2';

    append(str , c);
    printf("%s\n" , str);
}

好了,我想这就是你想要做的你可以修改数组大小以满足你的需要

我认为你应该让你的函数使用动态分配,因为在字符串中插入字符会使结果字符串变大,所以这是我的建议

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

void insert(char **str, char chr, unsigned int position)
{
        int   length;
        char *ptr;

        if (str == NULL)
                return;
        length = strlen(*str);
        if (position >= length)
                return;
        ptr = realloc(*str, 2 + length);
        if (ptr == NULL)
                return;
        *str = ptr;

        memmove(ptr + position + 1, ptr + position, length - position + 1);
        ptr[position] = chr;
}

int main(void)
{
        const char *source = "qos-tree/output_rate";
        size_t      length = strlen(source);
        char       *str    = malloc(1 + length);

        if (str == NULL)
                return -1;
        strcpy(str, source);

        insert(&str, '-', 8);
        insert(&str, '2', 9);

        printf("%s\n", str);

        free(str);
        return 0;
}