C语言中字符串管理的指针:替换字符串中的特定字符

时间:2019-01-23 03:19:25

标签: c string string.h

我想将.csv文件中一行中的所有“,”用“,-1,”替换。在此ID之前,还喜欢在行末添加逗号。

我试图通过将行分成两个子字符串来获得它,其中一个在之前,然后在一个之后,然后将它们连接起来,但是我很可能弄乱了每个东西都指向的东西。

同样,在此操作之前,我还要在文件末尾添加一个逗号,以便在末尾缺少值时也要小心。

//Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "/n");
strncpy(temp, ",/n", 2);
puts(line);

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[50];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    strncpy(temp, ",-1,", 4);
    strcat(temp, endTemp);
    puts(line);
}

我想我弄乱了我拉出的两个子字符串,因为如果起始字符串是这样的话:

ajd43,232,,0,0,0,3

它打印

ajd43,232,-1,0,0,0,3 ,(/ n)0,0,0,3

我认为错误最后是在strcat中,但是如果它们是执行此操作的更简单方法,我想使用它。

1 个答案:

答案 0 :(得分:2)

(1)您的“ / n”应该为“ \ n”。

(2)使用strncpy(temp,“,\ n”,3);或在temp [2]之后手动添加一个空字符。

(3)使用strncpy(temp,“,-1,”,5);或在temp [4]之后手动添加一个空字符。

(4)考虑截断并在strncpy上使用strcat。

(5)检查是否要在生产中使用超支。

(6)只需用逗号替换换行符。 puts()将其添加回去。 (因此更改了#2)

像这样:

// Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "\n");
strcpy(temp, ",");

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[70];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    temp[0] = '\0';
    strncat(line, ",-1,", 70);
    strncat(line, endTemp, 70);
}
puts(line);