005 - Strings
Arquivos necessários
Baixe todos os programas aqui.
Configuração do VSCode
Idênticas as da aula 4, incluídas no zip desta aula.
Python
string1.py
s = "Olá Strings!"
print(s)
string2.py
s = "Olá Strings!"
print(s)
print(f"Tamanho: {len(s)}")
for c in s:
print(c)
string5.py
s = "bola"
v = "bicicleta"
b = "ave"
print("bola > bicicleta?", s > v)
print("bicicleta < bola?", v < s)
print("bola > ave?", s < b)
print("bola == bola?", s == b)
print("A partir do primeiro l de bola: ", s[s.find("l") :])
print("A partir do primeiro o de bola: ", s[s.find("o") :])
print("A partir do primeiro x de bola: ", s[s.find("x") :])
v = s[:]
print("Valor de v: ", v)
# v[0] = "s"
v = "s" + v[1:]
print("Valor de s: ", s)
print("Valor de v: ", v)
roupa = "a roupa do rei de roma"
print("A partir de roupa:", roupa[roupa.find("roupa") :])
print("A partir de do:", roupa[roupa.find("do") :])
print("A partir de rei:", roupa[roupa.find("rei") :])
string6.py
s = "bola,casa,madeira"
for p in s.split(","):
print(p)
string7.py
s = "o rato roeu a roupa"
print(s.replace(" ", ""))
forca.py
https://python.nilo.pro.br/listagem4/capitulo%2007/listagem-07-02.html
##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
# https://python.nilo.pro.br/listagem4/capitulo%2007/listagem-07-02.html
#
# Arquivo: capítulo 07/07.02 - Jogo da forca.py
##############################################################################
palavra = input("Digite a palavra secreta:").lower().strip()
for x in range(100):
print()
digitadas = []
acertos = []
erros = 0
while True:
senha = ""
for letra in palavra:
senha += letra if letra in acertos else "."
print(senha)
if senha == palavra:
print("Você acertou!")
break
tentativa = input("\nDigite uma letra:").lower().strip()
if tentativa in digitadas:
print("Você já tentou esta letra!")
continue
else:
digitadas += tentativa
if tentativa in palavra:
acertos += tentativa
else:
erros += 1
print("Você errou!")
print("X==:==\nX : ")
print("X O " if erros >= 1 else "X")
linha2 = ""
if erros == 2:
linha2 = " | "
elif erros == 3:
linha2 = " \| "
elif erros >= 4:
linha2 = " \|/ "
print(f"X{linha2}")
linha3 = ""
if erros == 5:
linha3 += " / "
elif erros >= 6:
linha3 += " / \ "
print(f"X{linha3}")
print("X\n===========")
if erros == 6:
print("Enforcado!")
break
C
string1.c
#include <stdio.h>
int main(void)
{
char s[] = "Ola Strings!";
printf("%s\n", s);
}
string2.c
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[] = "Ola Strings!";
printf("%s\n", s);
printf("Tamanho com strlen: %lld\n", strlen(s));
printf("Tamanho com sizeof: %zu\n", sizeof(s));
puts("Com For 1:");
for (unsigned int i = 0; i < strlen(s); i++)
{
printf("%c\n", s[i]);
}
puts("Com while:");
unsigned int p = 0;
while (s[p])
{
printf("%c\n", s[p++]);
}
puts("Com For 2:");
for (unsigned int i = 0; s[i]; i++)
{
printf("%c\n", s[i]);
}
}
string3.c
#include <stdio.h>
#include <string.h>
// Tamanho da string x memória
int main(void)
{
char s[] = "Ola Strings!";
char v[30] = {0};
char b[30] = {'a', 'l', 'o', 0}; // = "alo"
printf("s = %s\n", s);
printf("v = %s\n", v);
printf("b = %s\n", b);
printf("Tamanho strlen de v = %lld\n", strlen(v));
printf("Tamanho sizeof de v = %zu\n\n\n", sizeof(v));
strcat(v, s);
printf("Depois do strcat com s: v = %s\n", v);
strcat(v, b);
printf("Depois do strcat com b: v = %s\n", v);
printf("Tamanho strlen de v = %lld\n", strlen(v));
printf("Tamanho sizeof de v = %zu\n", sizeof(v));
puts("Buffer Overflow");
strcat(v, s);
strcat(v, s);
printf("Tamanho strlen de v = %lld\n", strlen(v));
printf("Tamanho sizeof de v = %zu\n", sizeof(v));
// Segmentation fault
// strcat(v, s);
// strcat(v, s);
}
string4.c
#include <stdio.h>
#include <string.h>
// Procurando caracteres e strings
int main(void)
{ // 0123 &s[2]
char s[] = "bola";
printf("A partir do primeiro l de bola: %s\n", strchr(s, 'l'));
printf("A partir do primeiro o de bola: %s\n", strchr(s, 'o'));
printf("A partir do primeiro x de bola: %s\n", strchr(s, 'x'));
s[0] = 'c';
printf("Novo valor de s: %s\n", s);
char v[30];
strcpy(v, s);
printf("Valor de v: %s\n\n", v);
v[0] = 's';
printf("Valor de s: %s\n", s);
printf("Valor de v: %s\n", v);
}
string5.c
#include <stdio.h>
#include <string.h>
// Comparando
int main(void)
{
char s[] = "bola";
char v[] = "bicicleta";
char b[] = "ave";
printf("bola strcmp bicicleta: %d (>)\n", strcmp(s, v));
printf("bicicleta strcmp bola: %d (<)\n", strcmp(v, s));
printf("bola strcmp ave: %d (>)\n", strcmp(s, b));
printf("bola strcmp bola: %d (==)\n\n\n", strcmp(s, s));
// Erro de compilacao
// printf("bola == bicicleta: %d\n", s == v);
// printf("bicicleta < bola: %d\n", v < s);
// printf("bola > ave: %d\n", s > b);
// printf("bola == bola: %d\n", s == s);
printf("A partir de roupa: %s\n", strstr("a roupa do rei de roma", "roupa"));
printf("A partir de do: %s\n", strstr("a roupa do rei de roma", "do"));
printf("A partir de rei: %s\n", strstr("a roupa do rei de roma", "rei"));
}
string6.c
#include <stdio.h>
#include <string.h>
// Separando por ,
int main(void)
{
char s[] = "bola,casa,madeira";
for (int i = 0; s[i]; i++)
{
if (s[i] != ',')
{
printf("%c", s[i]);
}
else
{
puts("");
}
}
puts("");
}
string7.c
#include <stdio.h>
#include <string.h>
// Retirando espaços de uma string
int main(void)
{
char s[] = "o rato roeu a roupa";
char v[30] = {0};
int z = 0;
for (int i = 0; s[i]; i++)
{
if (s[i] != ' ')
{
v[z++] = s[i];
}
}
// v[z] = 0;
printf("V (s sem espaços): %s\n", v);
}
string8.c
#include <stdio.h>
#include <string.h>
void le_string(char destino[])
{
scanf("%s", destino);
}
// Lendo Strings
// 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
int main(void)
{
char s[50];
char v[50];
printf("Digite algo:\n");
le_string(s);
printf("Digite outra coisa:\n");
le_string(v);
printf("Algo: %s\n", s);
printf("Outra coisa: %s\n", v);
}
string9.c
#include <stdio.h>
#include <string.h>
void le_string(char destino[], int max)
{
fgets(destino, max, stdin);
}
// Lendo Strings
int main(void)
{
const int MAX = 50;
char s[MAX];
char v[MAX];
printf("Digite algo:\n");
le_string(s, MAX);
printf("Digite outra coisa:\n");
le_string(v, MAX);
printf("Algo: %s\n", s);
printf("Outra coisa: %s\n", v);
printf("strlen: %lld\n", strlen(v));
}
stringA.c
#include <stdio.h>
#include <string.h>
void le_string(char destino[], int max)
{
do
{
fgets(destino, max, stdin);
char *p = strchr(destino, '\n');
if (p != nullptr)
{
*p = 0;
break;
}
char u;
do
{
u = fgetc(stdin);
} while (u != 0 && u != '\n');
printf("Não há espaço para lermos tantos caracteres (max=%d)\n", max);
printf("Por favor redigite:\n");
} while (true);
}
// 12345678901234567890123456789012345678901234567890
// Lendo Strings
int main(void)
{
const int MAX = 50;
char s[MAX];
char v[MAX];
printf("Digite algo:\n");
le_string(s, MAX);
printf("Digite outra coisa:\n");
le_string(v, MAX);
printf("\nAlgo: %s\n", s);
printf("strlen(s): %lld\n", strlen(s));
printf("Outra coisa: %s\n", v);
printf("strlen(v): %lld\n", strlen(v));
}
forca.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
void le_string(char destino[], int max)
{
do
{
fgets(destino, max, stdin);
char *p = strchr(destino, '\n');
if (p != nullptr)
{
*p = 0;
break;
}
char u;
do
{
u = fgetc(stdin);
} while (u != 0 && u != '\n');
printf("Não há espaço para lermos tantos caracteres (max=%d)\n", max);
printf("Por favor redigite:\n");
} while (true);
}
void lower(char m[])
{
for (char *p = m; *p; p++)
{
*p = tolower(*p);
}
}
void lstrip(char m[])
{
int mlen = strlen(m);
int i;
for (i = 0; m[i] == ' ' && i < mlen; i++)
;
if (i == mlen)
{
m[0] = 0;
return;
}
for (int z = 0; i < mlen; i++)
{
m[z++] = m[i];
}
}
void rstrip(char m[])
{
int fim = strlen(m) - 1;
if (fim <= 0)
return;
for (; m[fim] == ' ' && fim >= 0; fim--)
;
if (fim > 0)
m[++fim] = 0;
}
void strip(char m[])
{
lstrip(m);
rstrip(m);
}
// Jogo da forca
int main(void)
{
const int MAX = 100;
char palavra[MAX] = {};
puts("Digite a palavra secreta:");
le_string(palavra, MAX);
lower(palavra);
strip(palavra);
for (int x = 0; x < 200; x++)
{
puts("");
}
char digitadas[MAX] = {};
char acertos[MAX] = {};
int erros = 0;
int lpalavra = strlen(palavra);
while (true)
{
char senha[MAX] = {};
for (int p = 0; p < lpalavra; p++)
{
senha[p] = (strchr(acertos, palavra[p])) ? palavra[p] : '.';
}
puts(senha);
if (strcmp(senha, palavra) == 0)
{
puts("Você acertou!");
break;
}
char tentativa[3] = {};
puts("\nDigite uma letra:");
le_string(tentativa, 3);
lower(tentativa);
if (strchr(digitadas, tentativa[0]) != 0)
{
puts("Você já tentou essa letra!");
continue;
}
else
{
strcat(digitadas, tentativa);
if (strchr(palavra, tentativa[0]) != 0)
{
strcat(acertos, tentativa);
}
else
{
erros++;
puts("Você errou!");
}
}
// Imprime o enforcado
puts("X==:==\nX : ");
puts(erros >= 1 ? "X O " : "X");
// Linha 2
if (erros == 2)
puts("X | ");
else if (erros == 3)
puts("X \\| ");
else if (erros >= 4)
puts("X \\|/ ");
else
puts("X");
// Linha 3
if (erros < 5)
puts("X");
else if (erros == 5)
puts("X / ");
else if (erros >= 6)
puts("X / \\ ");
puts("X\n===========");
if (erros == 6)
{
puts("Enforcado!\n");
break;
}
}
}
Videos
Linguagem C para quem já programa em Python - Aula 5
Parte 1 - Como funcionam as strings em C, como usá-las e alguns cuidados a tomar
Parte 2 - strcpy, strstr, scanf com strings, fgets
Parte 3 - fgetc, strlwr, tolower, jogo da forca
Assine o canal para não perder os novos vídeos