Como posso contar o número de "_"
em uma string como "bla_bla_blabla_bla"
?
c++
string
pattern-matching
andre de boer
fonte
fonte
Respostas:
fonte
std::count
retorna o tipoiterator_traits<InputIt>::difference_type
, que para a maioria dos contêineres padrãostd::ptrdiff_t
não éstd::size_t
.Pseudo-código:
EDIT: código de exemplo C ++:
Observe que este é um código a ser usado junto
std::string
, se você estiver usandochar*
, substituas.size()
porstrlen(s)
.Observe também: entendo que você deseja algo "o menor possível", mas sugiro que você use esta solução. Como você vê, você pode usar uma função para encapsular o código para você, para que não precise escrever o
for
loop todas as vezes, mas pode usar apenascount_underscores("my_string_")
no restante do seu código. O uso de algoritmos avançados em C ++ é certamente possível aqui, mas acho que é um exagero.fonte
Solução antiquada com variáveis nomeadas apropriadamente. Isso dá ao código algum espírito.
Edit: cerca de 8 anos depois, olhando para esta resposta, eu tenho vergonha de ter feito isso (mesmo que eu tenha justificado isso para mim mesma como uma piada sarcástica em uma pergunta de baixo esforço). Isso é tóxico e não está bem. Não estou removendo a postagem; Estou adicionando esse pedido de desculpas para ajudar a mudar a atmosfera no StackOverflow. Então, OP: peço desculpas e espero que você tenha acertado sua lição de casa, apesar dos meus truques e que respostas como a minha não o desencorajaram a participar do site.
fonte
fonte
Você escolhe ... Versão Lambda ... :)
Você precisa de vários inclui ... Deixo isso como um exercício ...
fonte
Usando a função lambda para verificar se o caractere é "_", apenas a contagem será incrementada, caso contrário, não será um caractere válido
fonte
[]( char c ){if(c =='_') return true; }
chama comportamento indefinido porque você não retornou um valor em todos os caminhos de códigoExistem vários métodos de pesquisa para std :: string, mas encontrar é provavelmente o que você está procurando. Se você quer dizer uma string no estilo C, o equivalente é strchr. No entanto, em ambos os casos, você também pode usar um loop for e verificar cada caractere - o loop é essencialmente o que esses dois agrupam.
Depois de saber como encontrar o próximo caractere, dada uma posição inicial, você avança continuamente sua pesquisa (ou seja, usa um loop), contando à medida que avança.
fonte
Contar ocorrências de caracteres em uma sequência é fácil:
fonte
Você pode descobrir a ocorrência de '_' na string de origem usando funções de string. A função find () recebe 2 argumentos, primeiro - string cujas ocorrências queremos descobrir e o segundo argumento toma posição inicial. Enquanto o loop é usado para descobrir a ocorrência até o final da string de origem.
exemplo:
fonte
Eu teria feito assim:
fonte
Eu teria feito algo assim :)
fonte
Experimentar
fonte
fonte