指向 C 中的字符串管理的指针:替换字符串中的特定字符
Pointer to string management in C: Replacing specific characters in a string
我想用“,-1,”替换 .csv 文件中一行中所有“,”的大小写。在这个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) 你的 "/n"s should be "\n"s.
(2) 使用 strncpy(temp, ",\n", 3);或者在 temp[2] 之后手动添加一个空字符。
(3) 使用 strncpy(temp, ",-1,", 5);或者在 temp[4] 之后手动添加一个空字符。
(4) 考虑截断并使用 strcat 而不是 strncpy。
(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] = '[=10=]';
strncat(line, ",-1,", 70);
strncat(line, endTemp, 70);
}
puts(line);
我想用“,-1,”替换 .csv 文件中一行中所有“,”的大小写。在这个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) 你的 "/n"s should be "\n"s.
(2) 使用 strncpy(temp, ",\n", 3);或者在 temp[2] 之后手动添加一个空字符。
(3) 使用 strncpy(temp, ",-1,", 5);或者在 temp[4] 之后手动添加一个空字符。
(4) 考虑截断并使用 strcat 而不是 strncpy。
(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] = '[=10=]';
strncat(line, ",-1,", 70);
strncat(line, endTemp, 70);
}
puts(line);