\documentclass[apostila.tex]{subfiles} \begin{document} \chapter{STRINGS} Uma string é uma sequência de caracteres. As strings são usadas para conter dados de texto - consistem de letras, algarismos, marcas de pontuação e outros símbolos. Na linguagem C, strings são armazenadas em matrizes do tipo char, e obedecem às mesmas regras válidas para estas. exemplos: \begin{lstlisting} char string[7] = {'B', 'r', 'a', 's', 'i', 'l', '\0'}; char string[7] = "Brasil"; char string[ ] = "Brasil"; \end{lstlisting} OBS.: O símbolo ``\verb|\0|'' indica o final de uma string. \section{Algumas funções de manipulação de string} A linguagem C oferece uma biblioteca padrão - string.h - para manipulação de strings. Apresentamos a seguir algumas das funções contidas nesta biblioteca. \subsection{strcpy()} Copia toda a segunda string para a primeira e retorna a string copiada. \begin{lstlisting} char *strcpy( char *destino, char *origem ); \end{lstlisting} \subsection{strlen()} Retorna o tamanho de uma string. \begin{lstlisting} unsigned long strlen( char *string ); \end{lstlisting} \subsection{strcat()} Concatena uma cópia da segunda string ao final da primeira e retorna a string concatenada. \begin{lstlisting} char *strcat( char *str1, char *str2 ); \end{lstlisting} \subsection{strcmp()} Compara duas strings, caractere por caractere, e retorna um valor. Uma observação importante é que os caracteres minúsculos são alfabeticamente maiores que os caracteres maiúsculos no contexto da linguagem C. Isso acontece devido ao uso da tabela ASCII. \begin{lstlisting} int strcmp( char *str1, char *str2 ); \end{lstlisting} Valor de Retorno Significado \begin{tabular}{|c|l|} \hline \verb|<0| & str1 é alfabeticamente menor do que str2 \\ \hline \verb|=0| & str1 é igual a str2 \\ \hline \verb|>0| & str1 é alfabeticamente maior do que str2 \\ \hline \end{tabular} \section{Exercícios} 1. Escreva um programa em C que receba várias palavras (strings) e as imprima na tela em ordem alfabética. Invente uma maneira criativa para o usuário indicar ao programa que não há mais palavras a serem lidas. 2. Escreva um programa em C que lê uma string do teclado e imprime a string invertida. 3. Um palíndromo é uma palavra tal que quando revertida é igual a ela mesma. Escreva um programa que recebe uma palavra e responde se ela é palíndromo ou não. 4. Para toda palavra é possível obter um subconjunto de letras consecutivas da mesma. Este conjunto pode receber denominações específicas de acordo com algumas propriedades que este respeita. Veja a seguir: Se $P$ é a palavra completa e $S$ é um subconjunto de caracteres consecutivos de $P$ e o operador $+$ representa a concatenação de duas strings, então: \begin{description} \item[prefixo] $S$ será prefixo de $P$ se $P = S + S'$, onde $S'$ é um outro conjunto de caracteres. \item[sufixo] $S$ será sufixo de $P$ se $P = S'+S$, onde $S'$ é um outro conjunto de caracteres. \item[substring] $S$ será substring se não estiver de acordo com nenhuma das condições anteriores. \end{description} De posse desses conceitos, escreva um programa em C que requisita uma string $P$ qualquer, a armazena, e logo depois requisita a entrada de uma string $S$ e imprime na tela se $S$ é prefixo, sufixo ou substring de $P$. O resultado será tal como o exemplo abaixo: \begin{verbatim} avaliação val val com relação a avaliação é: prefixo: não sufixo: não substring: sim cachorro com relação a cachorro é: prefixo: sim sufixo: sim substring: sim \end{verbatim} \end{document}