SingularCode

String em C

String em Linguagem C

Em C, as strings são tratadas como arrays de caracteres terminados por um caractere nulo (‘\0’), também conhecido como caractere de terminação de string. Este caractere nulo é crucial, pois indica onde a string termina, permitindo que funções da biblioteca padrão de C, como printf, strcpy, strlen, entre outras, saibam até onde ler ou manipular a string. Vamos explorar os conceitos fundamentais e características das strings em C, acompanhados de exemplos práticos.

Declaração e Inicialização de Strings

Uma string em C pode ser declarada como um array de caracteres:

Como Array de Caracteres

char minhaString[6] = "hello";

Neste caso, minhaString é um array de 6 caracteres, incluindo o caractere nulo automático ao final da string literal “hello”.

Usando Notação de String Literal

char minhaString[] = "hello";

Aqui, o tamanho do array minhaString é determinado automaticamente pelo compilador para ser 6, incluindo o caractere nulo.

Acessando e Modificando Caracteres

Você pode acessar ou modificar os caracteres individuais de uma string usando a indexação de array.

Exemplo de Acesso

char letra = minhaString[1]; // Acessa o segundo caractere da string, que é 'e'.

Exemplo de Modificação

minhaString[0] = 'H'; // Modifica o primeiro caractere de "hello" para "Hello".

Funções Comuns de Manipulação de Strings

A biblioteca padrão de C inclui várias funções para manipular strings, que requerem a inclusão do cabeçalho <string.h>. Algumas das funções mais usadas incluem:

strlen: Retorna o comprimento de uma string, não incluindo o caractere nulo.

int len = strlen(minhaString); // Calcula o comprimento de minhaString.

strcpy: Copia uma string para outra.

char destino[6];
strcpy(destino, minhaString); // Copia minhaString para destino.

strcat: Concatena duas strings, anexando a segunda à primeira.

char saudacao[11] = "Olá, ";
strcat(saudacao, "Mundo"); // Resulta em "Olá, Mundo" em saudacao.

strcmp: Compara duas strings lexicograficamente.

#include <stdio.h> 
#include <string.h>
int main() {
char minhaString[] = "hello";
int resultado = strcmp(minhaString, "hello");
if (resultado == 0) {
printf("As strings são iguais.\n");
}
else if (resultado < 0) {
printf("A primeira string é lexicograficamente menor que a segunda.\n");
} else {
printf("A primeira string é lexicograficamente maior que a segunda.\n");
}
return 0;
}

 

Exercícios

Exercício 1: Contar Caracteres
Escreva um programa em C que leia uma string do usuário e exiba o número de caracteres na string.

Exercício 2: Comparar Strings
Crie um programa em C que compare duas strings inseridas pelo usuário e informe se elas são iguais ou diferentes.

Exercício 3: Concatenar Strings
Desenvolva um programa em C que concatene duas strings fornecidas pelo usuário sem usar a função strcat da biblioteca string.h.

Exercício 4: Inverter String
Elabore um programa em C que leia uma string e a imprima invertida.

Exercício 5: Contar Vogais
Escreva um programa em C que conte o número de vogais em uma string fornecida pelo usuário.

Exercício 6: Substring
Crie um programa em C que, dada uma string e dois índices, imprima a substring correspondente aos índices fornecidos.

Exercício 7: Verificar Palíndromo
Desenvolva um programa em C que verifique se uma string é um palíndromo (a string é igual se lida de trás para frente).

Exercício 8: Substituir Caracteres
Elabore um programa em C que substitua todas as ocorrências de um determinado caractere em uma string por outro caractere fornecido pelo usuário.

Exercício 9: Contar Palavras
Escreva um programa em C que conte o número de palavras em uma string fornecida pelo usuário.

Exercício 10: Primeira Letra de Cada Palavra em Maiúsculo
Crie um programa em C que transforme a primeira letra de cada palavra de uma string em maiúscula.

//1)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100];
    printf("Digite uma string: ");
    fgets(str, 100, stdin); // Lê a string, incluindo espaços
    printf("Número de caracteres: %ld\n", strlen(str) - 1); // Subtrai 1 para não contar o '\n'
    return 0;
}
//2)
#include <stdio.h>
#include <string.h>
int main() {
    char str1[100], str2[100];
    printf("Digite a primeira string: ");
    fgets(str1, 100, stdin);
    printf("Digite a segunda string: ");
    fgets(str2, 100, stdin);
    if (strcmp(str1, str2) == 0)
        printf("As strings são iguais.\n");
    else
        printf("As strings são diferentes.\n");
    return 0;
}
//3)
#include <stdio.h>
#include <string.h>
int main() {
    char str1[100], str2[100];
    printf("Digite a primeira string: ");
    fgets(str1, 100, stdin);
    str1[strlen(str1) - 1] = '\0'; // Remove o '\n'
    printf("Digite a segunda string: ");
    fgets(str2, 100, stdin);
    strcat(str1, str2);
    printf("String concatenada: %s", str1);
    return 0;
}
//4)
#include <stdio.h>
#include <string.h>

int main() {
    char str[100], rev[100];
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    int j = 0;
    for (int i = strlen(str) - 2; i >= 0; i--) { // Começa em strlen(str) - 2 para ignorar '\n'
        rev[j++] = str[i];
    }
    rev[j] = '\0';
    printf("String invertida: %s\n", rev);
    return 0;
}
//5)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100];
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    int count = 0;
    for (int i = 0; str[i]; i++) {
        char c = tolower(str[i]);
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            count++;
        }
    }
    printf("Número de vogais: %d\n", count);
    return 0;
}
//6)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100], substr[100];
    int start, end;
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    printf("Digite o índice inicial e final: ");
    scanf("%d %d", &start, &end);
    strncpy(substr, &str[start], end - start + 1);
    substr[end - start + 1] = '\0';
    printf("Substring: %s\n", substr);
    return 0;
}
//7)
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
    int length = strlen(str) - 1; // Ignora '\n'
    for (int i = 0; i < length / 2; i++) {
        if (str[i] != str[length - i - 1]) {
            return false;
        }
    }
    return true;
}

int main() {
    char str[100];
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    if (isPalindrome(str))
        printf("A string é um palíndromo.\n");
    else
        printf("A string não é um palíndromo.\n");
    return 0;
}
//8)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100], original, substituto;
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    printf("Digite o caractere a ser substituído seguido pelo substituto: ");
    scanf(" %c %c", &original, &substituto); // Espaço antes de %c para ignorar '\n' anterior
    for (int i = 0; str[i]; i++) {
        if (str[i] == original) {
            str[i] = substituto;
        }
    }
    printf("String modificada: %s", str);
    return 0;
}
//9)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100];
    int count = 0;
    printf("Digite uma string: ");
    fgets(str, 100, stdin);
    for (int i = 0; str[i]; i++) {
        if (str[i] == ' ' || str[i] == '\n') {
            count++;
        }
    }
    printf("Número de palavras: %d\n", count);
    return 0;
}
//10)
#include <stdio.h>
#include <string.h>
int main() {
    char str[100];
    printf("Digite uma string: ");
    fgets(str, sizeof(str), stdin);
    str[0] = toupper(str[0]); // Primeira letra da string
    for (int i = 1; str[i]; i++) {
        if (str[i - 1] == ' ') {
            str[i] = toupper(str[i]);
        }
    }
    printf("String modificada: %s", str);
    return 0;
}

Atualizado em: 29/03/2024 por Nelson H. Koshoji