Há um certo tempo, quando esta matéria ainda era dada em C, uma questão bastante clássica sobre strings era separar uma string em palavras. Os espaços marcam a separação entre duas palavras, é claro. Por exemplo a string "atchim espirro banana maça" seria separada em "atchim", "espirro", "banana", "maça"
Talvez nesse momento você esteja pensando que se a questão for só isso é muito fácil, porque Python convenientemente oferece a função split() que faz esse trabalho para você? Poisé, C não tinha essa função, e o ponto da questão é exatamente implementá-la. Como Python já tem um split, você terá que implementar um que seja um pouquinho mais poderoso.
Entrada:
A entrada consiste em uma string s, composta por qualquer caractere exceto quebra de linha '\n'. As palavras são sequências de letras e elas estão separadas por qualquer caractere que não seja uma letra.
Os caracteres que separam palavras são diferentes entre si.
Cada palavra tem pelo menos 1 caractere.
Saída:
Imprima cada uma das palavras contidas em s, uma por linha.
Observações:
No primeiro exemplo de teste, a string é "atchim espirro#banana2maça". Temos 4 palavras. As duas primeiras estão separadas por espaço. As próximas duas por '#', e as últimas duas por '2'. Imprimimos uma por linha.
testes no anexo
Soluções para a tarefa
1 -
a = input("Digite a string que quer converter: ")
termos = "1234567890!@#$%-=[]{}´~`^;/:?|\'.,><&*()_+ "
b = ''
for i in a:
if i in termos:
print(b)
b = ''
else:
b+=i
print(b)
O código vai percorrendo a string digitada vendo se há caracteres especiais.
Digite a string que quer converter: atchim espirro#banana2maça
atchim
espirro
banana
maça
Olá! Eu até consegui fazer o algortimo, mas ele definitivamente não está completo. Teria que ter algumas verificações e mais algumas coisas para ele funcionar de maneira perfeita. E também, infelizmente, não consegui arrumar um jeito da função isalpha() suportar o UNICODE, então, qualquer caractere fora da lingua inglesa, não será impresso.
#include <stdio.h>
#include <ctype.h>
void split (const char *string) {
int counter=0;
int ini=0;
while (string[counter] != '\0') {
if (isalpha(string[counter])) {
counter++;
} else {
for (int i=ini; i<counter; i++) {
printf("%c", string[i]);
}
printf("\n");
counter++;
ini=counter;
}
}
printf("%s\n", &string[ini]);
}
int main () {
split("atchin espirro#banana-maca");
}
Apesar dos pesares, espero ter ajudado.
Nota: Dá para implementar a isalpha() na mão, fazendo uma verificação com os caracteres que você quiser.
Nota 2: Abaixo está o código com suporte aos símbolos da língua portuguesa. Implementei o isalpha() manualmente para isso.
#include <stdio.h>
int isalpha(char character){
char simbols[]="1234567890!@#$%-=[]{}´~`^;/:?|\'.,><&*()_+ ";
for(int i=0; i<=sizeof(simbols)-1; i++){
if(character == simbols[i]){
return 0;
}
}
return 1;
}
void split (const char *string) {
int counter=0;
int ini=0;
while (string[counter] != '\0') {
if (isalpha(string[counter])) {
counter++;
} else {
for (int i=ini; i<counter; i++) {
printf("%c", string[i]);
}
printf("\n");
counter++;
ini=counter;
}
}
printf("%s\n", &string[ini]);
}
int main () {
split("atchin espirro#banana-maça");
}