Strings e Manipulação em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como criar e manipular strings na programação C. Explorará diferentes métodos para definir strings, formatá-las usando printf, determinar seu comprimento com strlen e compará-las com strncmp. Essas operações fundamentais de string são essenciais para construir aplicações C robustas e flexíveis.

O laboratório cobre os seguintes passos: definir strings usando notação de ponteiro, definir strings usando notação de array local, formatar strings com printf, determinar o comprimento da string com strlen e comparar strings com strncmp. Ao final deste laboratório, você terá uma sólida compreensão de como trabalhar com strings em C e será capaz de aplicar essas técnicas em seus próprios projetos.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 95%. Recebeu uma taxa de avaliações positivas de 92% dos estudantes.

Definir Strings Usando Notação de Ponteiro

Neste passo, você aprenderá como definir strings usando notação de ponteiro em C. A notação de ponteiro oferece uma maneira flexível de criar e manipular strings na programação C.

Primeiro, vamos criar um novo arquivo para demonstrar a definição de string com notação de ponteiro:

cd ~/project
touch string_pointer.c

Agora, insira o seguinte código:

#include <stdio.h>

int main() {
    // Define a string usando notação de ponteiro
    char *greeting = "Hello, C Programming!";

    // Imprime a string
    printf("Greeting: %s\n", greeting);

    return 0;
}

Compile e execute o programa:

gcc string_pointer.c -o string_pointer
./string_pointer

Exemplo de saída:

Greeting: Hello, C Programming!

Vamos analisar o código:

  • char *greeting declara um ponteiro para um caractere (string)
  • "Hello, C Programming!" é um literal de string armazenado na memória
  • O ponteiro greeting aponta para o primeiro caractere da string
  • printf() usa o especificador de formato %s para imprimir a string inteira

Você também pode modificar o ponteiro para apontar para diferentes partes da string:

#include <stdio.h>

int main() {
    char *greeting = "Hello, C Programming!";

    // Aponta para uma parte específica da string
    char *partial = greeting + 7;

    printf("Original string: %s\n", greeting);
    printf("Partial string: %s\n", partial);

    return 0;
}

Exemplo de saída:

Original string: Hello, C Programming!
Partial string: C Programming!

Definir Strings Usando Notação de Array Local

Neste passo, você aprenderá como definir strings usando notação de array local em C. Este método oferece outra maneira de criar e inicializar strings com controle mais direto sobre o array de caracteres.

Vamos criar um novo arquivo para demonstrar a definição de string usando notação de array local:

cd ~/project
touch string_array.c

Insira o seguinte código:

#include <stdio.h>

int main() {
    // Define a string usando notação de array local
    char greeting[30] = "Hello, C Programming!";

    // Imprime a string
    printf("Greeting: %s\n", greeting);

    return 0;
}

Compile e execute o programa:

gcc string_array.c -o string_array
./string_array

Exemplo de saída:

Greeting: Hello, C Programming!

Vamos explorar algumas variações da notação de array local:

#include <stdio.h>

int main() {
    // Define um array com inicialização explícita
    char name[10] = {'J', 'o', 'h', 'n', '\0'};

    // Define um array com inicialização parcial
    char city[20] = "New York";

    // Define um array sem especificar o tamanho
    char message[] = "Welcome to C Programming!";

    printf("Name: %s\n", name);
    printf("City: %s\n", city);
    printf("Message: %s\n", message);

    return 0;
}

Exemplo de saída:

Name: John
City: New York
Message: Welcome to C Programming!

Pontos-chave sobre a notação de array local:

  • Você pode especificar o tamanho do array explicitamente
  • O '\0' (terminador nulo) é crucial para marcar o fim da string
  • Arrays podem ser inicializados com caracteres individuais ou como literais de string
  • Quando não totalmente inicializados, os elementos restantes são definidos como zero

Formatar Strings com printf

Neste passo, você aprenderá como usar printf() para formatar strings e vários tipos de dados em C. A função printf() oferece recursos poderosos de formatação de strings.

Vamos criar um novo arquivo para demonstrar a formatação de strings:

cd ~/project
touch string_formatting.c

Insira o seguinte código para explorar diferentes opções de formatação:

#include <stdio.h>

int main() {
    // Formatação básica de string
    char name[] = "Alice";
    int age = 30;
    float height = 5.8;

    // Saída simples de string
    printf("Name: %s\n", name);

    // Formatação com múltiplas variáveis
    printf("Profile: %s is %d years old\n", name, age);

    // Formatação com precisão de ponto flutuante
    printf("Height: %.1f meters\n", height);

    // Largura e alinhamento
    printf("Name (right-aligned): %10s\n", name);
    printf("Name (left-aligned):  %-10s\n", name);

    // Misturando diferentes especificadores de formato
    printf("Details: %s, %d years, %.1f meters\n", name, age, height);

    return 0;
}

Compile e execute o programa:

gcc string_formatting.c -o string_formatting
./string_formatting

Exemplo de saída:

Name: Alice
Profile: Alice is 30 years old
Height: 5.8 meters
Name (right-aligned):      Alice
Name (left-aligned): Alice
Details: Alice, 30 years, 5.8 meters

Especificadores de formato comuns:

  • %s: Strings
  • %d: Inteiros
  • %f: Números de ponto flutuante
  • %.1f: Ponto flutuante com 1 casa decimal
  • %10s: Alinhado à direita com largura de 10 caracteres
  • %-10s: Alinhado à esquerda com largura de 10 caracteres

Vamos explorar formatações mais avançadas:

#include <stdio.h>

int main() {
    // Representações hexadecimal e octal
    int number = 255;
    printf("Decimal: %d\n", number);
    printf("Hexadecimal: %x\n", number);
    printf("Octal: %o\n", number);

    // Preenchimento com zeros
    printf("Padded number: %05d\n", 42);

    return 0;
}

Exemplo de saída:

Decimal: 255
Hexadecimal: ff
Octal: 377
Padded number: 00042

Determinar o Comprimento da String com strlen

Neste passo, você aprenderá como usar a função strlen() para determinar o comprimento de strings em C. A função strlen() faz parte da biblioteca <string.h> e fornece uma maneira fácil de contar os caracteres em uma string.

Vamos criar um novo arquivo para demonstrar o cálculo do comprimento da string:

cd ~/project
touch string_length.c

Insira o seguinte código para explorar strlen():

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

int main() {
    // Define strings de diferentes comprimentos
    char greeting[] = "Hello, World!";
    char name[] = "Alice";
    char empty[] = "";

    // Calcula e imprime os comprimentos das strings
    printf("Greeting: %s\n", greeting);
    printf("Greeting length: %lu characters\n", strlen(greeting));

    printf("Name: %s\n", name);
    printf("Name length: %lu characters\n", strlen(name));

    printf("Empty string length: %lu characters\n", strlen(empty));

    return 0;
}

Compile e execute o programa:

gcc string_length.c -o string_length
./string_length

Exemplo de saída:

Greeting: Hello, World!
Greeting length: 13 characters
Name: Alice
Name length: 5 characters
Empty string length: 0 characters

Vamos explorar um exemplo mais prático de uso de strlen():

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

int main() {
    char input[100];

    printf("Enter a string: ");
    fgets(input, sizeof(input), stdin);

    // Remove o caractere de nova linha se presente
    input[strcspn(input, "\n")] = 0;

    // Calcula e imprime o comprimento da string
    size_t length = strlen(input);

    printf("You entered: %s\n", input);
    printf("String length: %lu characters\n", length);

    // Demonstra operações baseadas no comprimento
    if (length > 10) {
        printf("This is a long string!\n");
    } else if (length > 0) {
        printf("This is a short string.\n");
    } else {
        printf("You entered an empty string.\n");
    }

    return 0;
}

Pontos-chave sobre strlen():

  • Retorna o número de caracteres antes do terminador nulo
  • Não conta o terminador nulo
  • Funciona com arrays de caracteres e literais de string
  • Parte da biblioteca <string.h>, então inclua este cabeçalho
  • Retorna o tipo size_t (unsigned long)

Comparar Strings com strncmp

Neste passo, você aprenderá como usar a função strncmp() para comparar strings em C. A função strncmp() permite comparar um número especificado de caracteres entre duas strings.

Vamos criar um novo arquivo para demonstrar a comparação de strings:

cd ~/project
touch string_compare.c

Insira o seguinte código para explorar strncmp():

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

int main() {
    // Define strings para comparação
    char str1[] = "Hello, World!";
    char str2[] = "Hello, Everyone!";
    char str3[] = "Hello, World!";

    // Compara strings inteiras
    printf("Full string comparison:\n");
    int result1 = strncmp(str1, str2, strlen(str1));
    int result2 = strncmp(str1, str3, strlen(str1));

    printf("str1 vs str2: %d\n", result1);
    printf("str1 vs str3: %d\n", result2);

    // Compara os primeiros poucos caracteres
    printf("\nPartial string comparison:\n");
    int result3 = strncmp(str1, str2, 7);
    printf("First 7 characters of str1 vs str2: %d\n", result3);

    return 0;
}

Compile e execute o programa:

gcc string_compare.c -o string_compare
./string_compare

Exemplo de saída:

Full string comparison:
str1 vs str2: -1
str1 vs str3: 0

Partial string comparison:
First 7 characters of str1 vs str2: 0

Vamos criar um exemplo mais prático de comparação de strings:

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

int main() {
    // Exemplo de verificação de senha
    char stored_password[] = "SecretPass123";
    char input_password[20];

    printf("Enter password: ");
    scanf("%19s", input_password);

    // Compara os primeiros 10 caracteres da senha
    int comparison = strncmp(stored_password, input_password, 10);

    if (comparison == 0) {
        printf("Access granted!\n");
    } else {
        printf("Access denied!\n");
    }

    return 0;
}

Pontos-chave sobre strncmp():

  • Compara até um número especificado de caracteres
  • Retorna 0 se as strings corresponderem para o comprimento especificado
  • Retorna um valor negativo se a primeira string for lexicograficamente menor
  • Retorna um valor positivo se a primeira string for lexicograficamente maior
  • Parte da biblioteca <string.h>
  • Útil para comparações parciais de strings

Entendendo os valores de retorno de strncmp():

  • 0: Strings são iguais para o comprimento especificado
  • < 0: A primeira string vem antes da segunda string
  • 0: A primeira string vem depois da segunda string

Resumo

Neste laboratório, você aprendeu como definir strings usando tanto a notação de ponteiro quanto a notação de array local em programação C. Com a notação de ponteiro, você pode criar e manipular strings de forma flexível usando um ponteiro de caractere. Com a notação de array local, você tem mais controle direto sobre o array de caracteres. Você também aprendeu como formatar strings com printf(), determinar o comprimento da string com strlen(), e comparar strings com strncmp(). Essas técnicas de manipulação de strings são habilidades fundamentais para trabalhar com dados de texto em C.