Указатель на управление строкой в ​​C: замена определенных символов в строке - PullRequest
0 голосов
/ 23 января 2019

Я хочу заменить все регистры ",," в строке из CSV-файла на ", -1,".До этого идентификатора также нравилось добавлять запятую в конец строки.

Я пытался получить ее, разбивая строку на две подстроки, одну из вещей перед ,, и одну послезатем объединяю их, но я, вероятно, испортил то, на что указывает каждая вещь.

Также перед этой операцией я хотел бы добавить дополнительную запятую в конце файла, чтобы, если в конце также было пропущено значение, о котором позаботились.

//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 голосов
/ 23 января 2019

(1) Ваши "/ n" должны быть "\ n".

(2) Использовать strncpy (temp, ", \ n", 3); или вручную добавьте нулевой символ в temp [2] после.

(3) Использовать strncpy (temp, ", -1,", 5); или вручную добавьте нулевой символ в temp [4] после.

(4) Рассмотрите возможность усечения и использования strcat вместо strncpy.

(5) Проверьте на переполнение, если это будет использоваться в производстве.

(6) Просто замените символ новой строки запятой. put () добавит его обратно. (изменяя таким образом № 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);
...