Não Erre Mais
string é muito melhor que char

Em C, um string é na realidade apenas uma matriz de caracteres - char - que sempre inclui um zero binário - normalmente denominado null terminator - para indicar o último elemento da matriz. Há muitas e boas diferenças entre string em C++ e esse seu antecessor em C.

A primeira, e mais relevante, é que string cm C++ oculta toda a representação física da seqüência de caracteres contida no string. 

string contém ainda informações tamanho e localização dos dados em memória.

Mais especificamente, string sabe sua localização inicial em memória, seu conteúdo, seu tamanho em número de caracteres e o quanto pode crescer antes que seja necessário redimensionar seu buffer de dados interno. Sim, string redimensiona automaticamente seu buffer de dados, quando necessário. 

Dessa forma,
string reduz a probabilidade de se incorrer nos três erros mais comuns quando se use matrizes de char:
  • Exceder os limites da matriz
  • Tentativa de acessar a matriz via pointers não inicializados, ou não inicializados corretamente
  • Tentativa de acessar a matriz via pointer para uma área de memória já desalocada.
A classe string <cstring.h>
As descrições de classe string que se seguem baseiam-se nos recursos do compilador que eu uso: Borland C++ 5.02. Na dúvida, verifique o arquivo cstrig.h do compilador que você usa.
Sumário
Contrutores:
1 string();
O construtor default. Cria um string de tamanho zero.
2 string(const string _FAR &s);
O construtor de cópia. Cria um string que contém uma cópia do string s
3 string(const string _FAR &s, size_t start, size_t n = NPOS);
Cria um string contendo uma cópia de um substring do string s. O substring a ser copiado começa na posição start e tem n bytes de tamanho.
4 string(const char _FAR *cp);
Cria um string contendo uma cópia da seqüência de caracteres existentes na matriz de char apontada por cp. cp deve apontar para uma matriz de caracteres terminada em zero binário - null terminator.
5 string(const char _FAR *cp, size_t start, size_t n = NPOS);
Cria um string contendo uma cópia de um substring da seqüência de caracteres existentes na matriz de char apontada por cp.. O substring a ser copiado começa na posição start e tem n bytes de tamanho.
6 string(char c);
Constrói um string contendo o caracter c.
7 string( char c, size_t n = NPOS );
Constrói um string contendo uma seqüência de n repetições do caracter c.
8 string(signed char c);
Constrói um string contendo o caracter c.
9 string( signed char c, size_t n = NPOS );
Constrói um string contendo uma seqüência de n repetições do caracter c.
10 string(unsigned char c);
Constrói um string contendo o caracter c.
11 string( unsigned char c, size_t n = NPOS );
Constrói um string contendo uma seqüência de n repetições do caracter c.
12 string(const TSubString _FAR &ss);
Constrói um string contendo a seqüência de caracteres existente em ss.
13 string(const char __far *cp);
Constrói um string for Windows small and medium memory model.
14 string(const char __far *cp, size_t start, size_t n = NPOS);
Contrói um string for Windows small and medium memory model.
15 string(HINSTANCE instance, UINT id, int len = 255);
Versão Windows para a construção de um string a partir de um recurso.
Data Type
enum StripType { Leading, Trailing, Both };
Enumera os três tipos de Strip.
Funções-membro public:
void ansi_to_oem();
Converte o string corrente de ANSI character set para OEM-defined character set

1 string _FAR & append( const string _FAR &s );
Acrescenta o string s ao final do string corrente

2 string _FAR & append(const string _FAR &s, 
                     size_t start, 
                     size_t n = NPOS);
Acrescenta um substring de s ao final do string corrente.O substring a ser acrescentado começa na posição start e tem n bytes de tamanho.

3 string _FAR & append(const char _FAR *cp, 
                     size_t start, 
                     size_t n = NPOS );
Acrescenta um substring da seqüência de caracteres existentes na matriz de char apontada por cp ao string corrente. O substring a ser acrescentado começa na posição start e tem n bytes de tamanho.

1 string _FAR & assign( const string _FAR &s );
Atribui o conteúdo do string s ao string corrente.

2 string _FAR & assign(const string _FAR &s, 
                     size_t start, 
                     size_t n = NPOS );
Atribui um substring de s ao string corrente.O substring a ser atribuído começa na posição start e tem n bytes de tamanho.

1 int compare(const string _FAR &s) const throw();
Compara o string corrente com o string s. Retorna um inteiro menor que, igual a ou maior que zero, conforme o string corrente seja menor que, igual a ou maior que o string s

2 int compare(const string _FAR &s, 
            size_t orig, 
            size_t n = NPOS) const throw();
Compara não mais que n caracteres do string corrente com o string s. Retorna um inteiro com os mesmos critérios já descritos na versão [1] da função compare.

1 int contains(const char _FAR * pat) const;
Retorna 1 se pat for encontrado no string corrente. Se não retorna zero.

2 int contains(const string _FAR & s) const;
Retorna 1 se o  string s  for encontrado no string corrente. Se não retorna zero.

1 size_t copy(char _FAR *cb, size_t n = NPOS);
Copia até n caracteres do string corrente para a matriz de caracteres apontada por cb. Retorna o número de caracteres efetivamente copiados.

2 size_t copy(char _FAR *cb, size_t n, size_t pos);
Copia até n caracteres do string corrente para a matriz de caracteres apontada por cb, iniciando a cópia a partir da posição pos da matriz. Retorna o número de caracteres efetivamente copiados.

3 string copy() const throw( xalloc );
Retorna uma cópia distinta do string corrente.

const char _FAR *c_str() const;
Retorna um pointer para uma matriz de char terminada com zero binário - null terminator - que contém a mesma seqüência de caracteres que o string corrente. 

O pointer que retorna pode tanto apontar para o conteúdo real do string corrente, quanto para uma área de memória alocada especificamente para atender a essa chamada da função. Portanto, qualquer tentativa de modificar o conteúdo do string corrente usando o pointer retornado por essa função é absolutamente imprevisível.

1 size_t find(const string _FAR &s);
Localiza a primeira ocorrência do string s no string corrente. Se o string s for encontrado, retorna a posição inicial da ocorrência dentro do string corrente, caso contrário, retorna NPOS

2 size_t find( const string _FAR &s, size_t pos );
Localiza a primeira ocorrência do string s no string corrente, começando a pesquisa na posição pos do string corrente. Se o string s for encontrado, retorna a posição inicial da ocorrência dentro do string corrente, caso contrário, retorna NPOS e não modifica o conteúdo de pos

3 size_t find( const TRegexp _FAR &pat, size_t i = 0 );
Pesquisa o string corrente procurando uma seqüência de caracteres coincidente com o resultado da expressão pat. Se a seqüência for encontrada, retorna a posição inicial da ocorrência dentro do string corrente, caso contrário, retorna NPOS e não modifica o conteúdo de pos

4 size_t find(const TRegexp _FAR &pat, 
            size_t _FAR *ext, 
            size_t i = 0) const;
Pesquisa o string corrente procurando uma seqüência de caracteres coincidente com o resultado da expressão pat, começando a pesquisa a partir da posição i do string corrente. Se a seqüência for encontrada, retorna a posição inicial da ocorrência dentro do string corrente e ext retorna com o tamanho do string encontrado, caso contrário, retorna NPOS e não modifica o conteúdo de pos

1 size_t find_first_of( const string _FAR &s ) const;
Localiza a primeira ocorrência de qualquer dos caracteres do string s dentro do string corrente. Se a pesquisa for bem sucedida, retorna a localização do caracter encontrado, caso contrário, retorna NPOS.

2 size_t find_first_of( const string _FAR &s, size_t pos ) const;
Localiza a primeira ocorrência de qualquer dos caracteres do string s dentro do string corrente, começando a pesquisa a partir da posição pos. Se a pesquisa for bem sucedida, pos retorna com a localização do caracter encontrado, e a função retorna 1, caso contrário, a função retorna NPOS. Se o conteúdo de pos, na chamada da função, for maior que o tamanho do string, a função retorna NPOS.

1 size_t find_first_not_of( const string _FAR &s ) const;
Localiza a primeira ocorrência diferente dos caracteres contidos no string s dentro do string corrente. Se a pesquisa for bem sucedida, retorna a localização do caracter encontrado, caso contrário, retorna NPOS.

2 size_t find_first_not_of(const string _FAR &s, 
                         size_t pos) const;
Localiza a primeira ocorrência diferente dos caracteres contidos no string s dentro do string corrente, começando a pesquisa a partir da posição pos. Se a pesquisa for bem sucedida, retorna a posição do caracter encontrado, caso contrário, a função retorna NPOS. Se o conteúdo de pos, na chamada da função, for maior que o tamanho do string, a função retorna NPOS.

1 size_t find_last_of(const string _FAR &s) const;
Localiza a última ocorrência de qualquer dos caracteres do string s dentro do string corrente. Se a pesquisa for bem sucedida, retorna a localização do caracter encontrado, caso contrário, retorna NPOS.

2 size_t find_last_of(const string _FAR &s, size_t pos) const;
Localiza a última ocorrência de qualquer dos caracteres do string s [após a posição pos] dentro do string corrente. Se a pesquisa for bem sucedida, retorna a localização do caracter encontrado, caso contrário, retorna NPOS. Se o conteúdo de pos, na chamada da função, for maior que o tamanho do string, a função retorna NPOS.

1 size_t find_last_not_of( const string _FAR &s ) const;
Localiza a última ocorrência que difere de todos os caracteres contidos no string s dentro do string corrente. Se a pesquisa for bem sucedida, retorna com a localização do caracter encontrado, caso contrário, a função retorna NPOS

2 size_t find_last_not_of(const string _FAR &s, 
                        size_t pos) const;
Localiza a última ocorrência que difere de todos os caracteres contidos no string s [após a posição pos] dentro do string corrente . Se a pesquisa for bem sucedida, retorna com a localização do caracter encontrado, caso contrário, a função retorna NPOS

char get_at(size_t pos) const throw( outofrange );
Retorna o caracter existente na posição pos do string. Se pos for maior que o tamanho do string - 1, uma exceção [outrange] será ativada.

static int get_case_sensitive_flag();
Retorna zero se o método de comparação do string corrente é case sensitive [diferencia maiúsculas de minúsculas], se não retorna 1

static unsigned get_initial_capacity();
Retorna a quantidade de caracteres que pode ser armazenada no string, sem que seja necessário redimensionamento automático.

static unsigned get_max_waste();
Após o redimensionamento do string, retorna a quantidade de espaço livre disponível.

static int get_paranoid_check();
Retorna 1 se paranoid checking está habilitado, se não retorna zero. Veja set_paranoid_check

static unsigned get_resize_increment();
Retorna o tamanho do incremento para redimensionamento automático do string.

static int get_skipwhitespace_flag();
Retorna 1 se espaços em branco estão sendo saltados, se não retorna zero. Veja skip_whitespace

unsigned hash() const;
Retorna o valor de hash

static size_t initial_capacity(size_t ic = 63);
Determina a capacidade inicial de armazenamento do string.

1 string _FAR &insert( size_t pos, const string _FAR &s );
Insere o string s na posição pos do string corrente. Retorna uma referência para o string resultante.

2 string _FAR &insert(size_t pos, 
                    const string _FAR &s, 
                    size_t start, 
                    size_t n = NPOS );
Começando na posição start do string s, essa função insere não mais que n caracteres do string corrente [a partir da posição pos] no string s. Se pos tiver um conteúdo inválido, uma exceção [outofrange] será ativada. 

int is_null() const;
Retorna 1 se o string estiver vazio. Se não retorna zero.

unsigned length() const;
Retorna o tamanho do string. Lembre-se que caracteres nulos [zero binário] podem ser armazenados em um string. Portanto, length() pode eventualmente ser maior que strlen(c_str())

static size_t MaxWaste(size_t mw = 63);
Determina o máximo de espaço livre a ser reservado no próximo redimensionamento do string.

void oem_to_ansi();
Converte o string corrente de OEM-defined character set para  ANSI character set

1 string _FAR &prepend( const string _FAR &s );
Acrescenta o string s ao início do string corrente.

2 string _FAR &prepend(const string _FAR &s, 
                     size_t start, 
                     size_t n = NPOS );
Começando na posição start do string s, essa função acrescenta n caracteres do string s ao início do string corrente.

3 string _FAR &prepend( const char _FAR *cp );
Acrescenta a matriz de char apontada por cp ao início do string corrente.

4 string _FAR &prepend(const char _FAR *cp, 
                     size_t start, 
                     size_t n = NPOS );
Começando na posição start da matriz de char apontada por cp, acrescenta n caracteres da matriz ao início do string corrente.

void put_at( size_t pos, char c ) throw( outofrange );
Substitui o caracter existente na posição pos do string corrente pelo caracter c. Se pos for maior ou igual ao tamanho do string, uma exceção [outofrange] será ativada.

istream _FAR &read_file(istream _FAR &is);
Lê do input stream is para dentro do string corrente, até que um EOF ou um null terminator seja encontrado.

istream _FAR &read_line(istream _FAR &is);
Lê do input stream is para dentro do string corrente, até que um EOF ou um new line seja encontrado.

istream _FAR &read_string(istream _FAR &is);
Lê do input stream is para dentro do string corrente, até que um EOF ou um null terminator seja encontrado.

istream _FAR &read_to_delim(istream _FAR &is, 
                            char delim = '\n');
Lê do input stream is para dentro do string corrente, até que um EOF ou um caracter delim seja encontrado.

istream _FAR &read_token(istream _FAR &is);
Lê do input stream is para dentro do string corrente, até que um espaço em branco seja encontrado. Note que espaços em branco iniciais são desconsiderados por essa função.

1 size_t rfind( const string _FAR &s );
Localiza a última ocorrência do string s no string corrente. Se o string s for encontrado, retorna a posição inicial da ocorrência dentro do string corrente, caso contrário, retorna NPOS

2 size_t rfind( const string _FAR &s, size_t pos );
Localiza a última ocorrência do string s no string corrente. A pesquisa começa na primeira posição do string corrente e termina na posição pos. Retorna a posição inicial do string encontrado, se não encontrar retorna NPOS e não modifica o conteúdo de pos

1 string _FAR &remove( size_t pos );
Remove os caracteres a partir da posição pos até o final do string corrente. Retorna uma referência para o string resultante.

2 string _FAR &remove( size_t pos, size_t n = NPOS );
Remove no máximo n caracteres do string corrente, começando a remoção pela posição pos. Retorna uma referência para o string resultante.

1 string _FAR &replace(size_t pos, 
                            size_t n = NPOS, 
                     const string _FAR &s );
Remove até n caracteres do string corrente, começando na posição pos. Substitui o substring removido por uma cópia do string s. Retorna uma referência para o string resultante.

2 string _FAR &replace(size_t pos, 
                     size_t n1, 
                     const string _FAR &s, 
                     size_t start, 
                     size_t n2);
Remove até n1 caracteres do string corrente começando a remoção pela posição pos. Substitui o substring removido por n2 caracteres do string s tomados a partir da posição start do string s

1 size_t reserve() const;
Retorna um valor que indica o quantidade de memória para armazenamento do string. Esse valor é sempre maior ou igual que length()

2 void reserve( size_t ic );
Sugere um valor ic que o string deverá eventualmente requerer de memória para armazenamento.

void resize(size_t m);
Redimensiona o string corrente para m caracteres. Adiciona espaços em branco ou trunca o string existente, conforme seja necessário.

static size_t resize_increment(size_t ri = 64);
Determina o valor de incremento  ri  a ser usado em redimensionamento automático do string corrente.

static int set_case_sensitive(int tf = 1);
Determina case sensitive [1/0 - sim/não] para o string corrente. 

static int set_paranoid_check(int ck = 1);
Pesquisas em string - para localizar a ocorrência de outros strings, como em find - são feitas primeiramente com um esquema de valor hash. Há a possibilidade de que mais que um string resulte no mesmo valor hash. Determinar paranoid_check = 1, força que uma verificação adicional seja feita usando a função strcmp do C. Quando paranoid_check é zero, essa verificação final não é realizada.  

static int skip_whitespace(int sk = 1);
Determina [1/0 - sim/não] que sejam desprezados espaços em branco após a leitura de um token.

TSubString strip( StripType s = Trailing, char c=' ');
Remove todos os caracteres iguais ao caracter c do início ou do final do string corrente. O modo de operação dessa função é determinado pelos valores de StrypType.

1 string substr( size_t pos ) const;
Cria um string contendo um cópia da seqüência de caracteres existente a partir da posição pos até o final do string corrente.

2 string substr( size_t pos, size_t n = NPOS ) const;
Cria um string contendo uma cópia da seqüência de até n caracteres existente a partir da posição pos até o final do string corrente.

void to_lower();
Converte o conteúdo do string corrente para o equivalente em letras minúsculas. 
Alguns compiladores não realizam
to_lower para caracteres acentuados nem para cedilha.

void to_upper();
Converte o conteúdo do string corrente para o equivalente em letras maiúsculas. 
Alguns compiladores não realizam
to_upper para caracteres acentuados nem para cedilha.

Funções-membro protected:
void assert_element( size_t pos ) const;
Ativa uma exceção outofrange se um elemento não válido for dado.

void assert_index( size_t pos ) const;
Ativa uma exceção outofrange se um índice não válido for dado.

void cow();
Copy-on-write. Múltiplas instâncias de um string podem ser referir a uma mesma área de dados enquanto o string estiver em um estado read-only. Se alguma das instâncias modifica o string, a função cow é ativada para fazer uma cópia do string se houver outras instâncias do string referindo-se à área de dados original.

int valid_element( size_t pos ) const;
Retorna 1 se pos é um elemento válido do string corrente. Se não retorna zero.

int valid_index( size_t pos ) const;
Retorna 1 se pos é um índice válido para o string corrente. Se não retorna zero.

Operadores
string _FAR & operator=(const string _FAR &s);
Se o string corrente e o string s forem o mesmo objeto, nenhuma ação é desencadeada. Se forem objetos distintos, todos os recursos alocados ao string corrente são liberados e o string s é copiado para dentro do string corrente.

1 string _FAR & operator += (const string _FAR &s);
Acrescenta [append] o string s ao final do string corrente.

2 string _FAR & operator+=(const char _FAR *cp);
Acrescenta [append] a matriz de char apontada por cp ao final do string corrente.

friend string _Cdecl _FARFUNC operator+(const string _FAR &s, 
                                        const char _FAR *cp);
Concatena o string s e a matriz de char apontada por cp

1 char _FAR & operator[](size_t pos);
Retorna uma referência para o caracter existente na posição pos do string corrente.

2 char operator[](size_t pos) const;
Retorna o caracter existente na posição pos do string corrente.

1 friend int operator == ( const string _FAR &s1, 
                         const string _FAR &s2 );
Verifica se o string s1 é igual ao string s2. Dois strings são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois strings são iguais. Se não retorna zero. 

2 friend int operator == ( const string _FAR &s, 
                         const char _FAR *cp );
Verifica se o string s é igual à matriz de char apontada por cp. Os dois são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois são iguais. Se não retorna zero.

3 friend int operator == ( const char _FAR *cp, 
                         const string _FAR &s );
Verifica se o string s é igual à matriz de char apontada por cp. Os dois são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois são iguais. Se não retorna zero.

1 friend int operator != ( const string _FAR &s1, 
                         const string _FAR &s2 );
Verifica se o string s1 é diferente do string s2. Dois strings são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois strings são diferente. Se não retorna zero.

2 friend int operator != ( const string _FAR &s, 
                         const char _FAR *cp );
Verifica se o string s é diferente da  matriz de char apontada por cp. Os dois são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois são diferentes. Se não retorna zero.

friend int operator != ( const char _FAR *cp, 
                         const string _FAR &s );
3 Verifica se o string s é diferente da  matriz de char apontada por cp. Os dois são iguais quando tem o mesmo tamanho e ,em cada localização da seqüência de caracteres, contem exatamente o mesmo caracter. Retorna 1 para indicar que os dois são diferentes. Se não retorna zero.

1 friend int operator < ( const string _FAR &s1, 
                        const string _FAR &s2 );
Compara os strings s1 e s2. Retorna 1 se o string s1 for menor que s2. Se não retorna zero.

2 friend int operator < ( const string _FAR &s, 
                        const char _FAR *cp );
Compara o string s e a matriz de char apontada por cp. Retorna 1 se o string s for menor que a matriz em cp. Se não retorna zero.

3 friend int operator < ( const char _FAR *cp, 
                        const string _FAR &s );
Compara a matriz de char apontada por cp.e o string s. Retorna 1 se a matriz em cp for menor que o string s. Se não retorna zero.

1 friend int operator <= ( const string _FAR &s1, 
                         const string _FAR &s2 );
Compara os strings s1 e s2. Retorna 1 se o string s1 for menor que ou igual a s2. Se não retorna zero.

2 friend int operator <= ( const string _FAR &s, 
                         const char _FAR *cp );
Compara o string s e a matriz de char apontada por cp. Retorna 1 se o string s for menor que ou igual a matriz em cp. Se não retorna zero.

3 friend int operator <= ( const char _FAR *cp, 
                         const string _FAR &s );
Compara a matriz de char apontada por cp.e o string s. Retorna 1 se a matriz em cp for menor que ou igual ao string s. Se não retorna zero.

1 friend int operator > ( const string _FAR &s1, 
                        const string _FAR &s2 );
Compara os strings s1 e s2. Retorna 1 se o string s1 for maior que s2. Se não retorna zero.

2 friend int operator > ( const string _FAR &s, 
                        const char _FAR *cp );
Compara o string s e a matriz de char apontada por cp. Retorna 1 se o string s for maior que a matriz em cp. Se não retorna zero.

3 friend int operator > ( const char _FAR *cp, 
                        const string _FAR &s );
Compara a matriz de char apontada por cp.e o string s. Retorna 1 se a matriz em cp for maior que o string s. Se não retorna zero.

1 friend int operator >= ( const string _FAR &s1, 
                         const string _FR &s2 );
Compara os strings s1 e s2. Retorna 1 se o string s1 for maior que ou igual a s2. Se não retorna zero.

2 friend int operator >= ( const string _FAR &s, 
                         const char _FAR *cp );
Compara o string s e a matriz de char apontada por cp. Retorna 1 se o string s for maior que ou igual a matriz em cp. Se não retorna zero.

3 friend int operator >= ( const char _FAR *cp, 
                         const string _FAR &s );
Compara a matriz de char apontada por cp.e o string s. Retorna 1 se a matriz em cp for maior que ou igual ao string s. Se não retorna zero.

Compilação e Tradução: Dagoberto Haele Arnaut

| Home | Bookmarks | Universidades | Para Saber mais | Universidades | WEB Directory | Mapa do site |