Usando "sscanf" para Dividir String com Delimitadores em C

Publicado por Mauricio Ferrari em 26/02/2021

[ Hits: 4.438 ]

Blog: https://www.youtube.com/@LinuxDicasPro

 


Usando "sscanf" para Dividir String com Delimitadores em C



Você está programando em C e precisa de um método simples para separar strings em strings menores ou qualquer outra variável. Além de dividir a string, você quer os resultados gravados em outras variáveis, seja int, char, entre outros. Talvez, você se interesse pelo sscanf.

Seu uso é muito simples. Veja o exemplo a seguir:

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

int main() {
    char *teste = (char *)malloc(sizeof(char));
    teste = "10/20/30";

    int a, b, c;
    sscanf(teste, "%d/%d/%d", &a, &b, &c);
    printf("
Resultado:
%d %d %d 
", a, b, c);

    teste = "pera,uva,figo";
    char *str1 = (char *)malloc(sizeof(char));
    char *str2 = (char *)malloc(sizeof(char));
    char *str3 = (char *)malloc(sizeof(char));

    sscanf(teste, "%[^,],%[^,],%[^,]", str1, str2, str3);
    printf("
Resultado:
%s %s %s 
", str1, str2, str3);
    return 0;
}

Note que eu exemplifiquei usando alocação dinâmica, não é obrigatório. Você pode declarar a variável char normalmente como você preferir. O que nos interessa é como a função sscanf foi usada. No primeiro exemplo, note que foi possível usar a barra como delimitador e usar os números para gravá-los em variáveis int, bem prático.

No segundo exemplo, o negócio muda um pouco de figura, no lugar de "%s" foi usado "%[^,]", ou seja, pegue o valor entre o começo da delimitação e a vírgula. Usando o "%s", as vírgulas serão recolhidas e gravadas nas novas variáveis também, o que não é interessante nesse caso. Note também que não foi necessário usar "&" para fazer a divisão para outras strings.

Fica a dica.

Outras dicas deste autor

Correção do warning: setlocale: LC_ALL: cannot change locale (pt_BR.UTF-8) no ArchLinux, Manjaro, BigLinux, Junest (mini Arch Linux)

Comando 'cat' Colorido? Conheçam o 'ccat'

Qmplay2 no Linux Mint 20 64bit

A barra de tarefas ficou toda preta [Resolvido]

Liberando o ctrl+s e o ctrl+q para o VIM

Leitura recomendada

Corrigindo o bug "file format not recognized" após atualizar glib2

FL-Av - Interface gráfica para ClamAV

Ambiente de desenvolvimento integrado para console

C compiler Cannot create executable?

system("pause") para Linux

  

Comentários
[1] Comentário enviado por SamL em 18/03/2021 - 05:50h

Legal.


____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
"com o bug fix vem a perfeição"

[2] Comentário enviado por maurixnovatrento em 18/03/2021 - 09:08h


valeu.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts