解析 C 中以逗号和换行符分隔的字符串

问题描述 投票:0回答:1

我想解析一个包含多个换行符的字符串,每行都用逗号分隔,我想打印每行中用逗号分隔的每个元素。这是我尝试过的方法,但是没用。

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

int main() {
    char cadena[] = "10,Arbol,3.5\n20,Perro,4.0\n30,Mesa,4.5";
    char cadena_copy[sizeof(cadena)]; // Crea una copia de cadena
    strcpy(cadena_copy, cadena);

    char *linea = strtok(cadena_copy, "\n"); // Tokeniza la cadena por saltos de línea

    // Itera sobre cada línea
    while (linea != NULL) {
        char *token = strtok(linea, ","); // Tokeniza la línea por comas

        // Itera sobre cada valor en la línea
        while (token != NULL) {
            printf("%s\n", token); // Imprime el valor
            token = strtok(NULL, ","); // Obtiene el siguiente valor
        }

        linea = strtok(NULL, "\n"); // Obtiene la siguiente línea
    }

    return 0;
}

这就是我期望的输出:

10
Arbol
3.5
20
Perro
4.0
30
Mesa
4.5

但是我只得到第一行:

10
Arbol
3.5

我该如何解决这个问题?

c parsing gcc
1个回答
0
投票

只需在分隔符字符串中使用两者即可

int main() {
    char cadena[] = "10,Arbol,3.5\n20,Perro,4.0\n30,Mesa,4.5";
    char cadena_copy[sizeof(cadena)]; // Crea una copia de cadena
    strcpy(cadena_copy, cadena);

        char *token = strtok(cadena_copy, ",\n");

        // Itera sobre cada valor en la línea
        while (token != NULL) {
            printf("%s\n", token); // Imprime el valor
            token = strtok(NULL, ",\n"); // Obtiene el siguiente valor
        }

    return 0;
}

https://godbolt.org/z/fMv9evK7W

© www.soinside.com 2019 - 2024. All rights reserved.