1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C++] Comparar String com ENTER

Discussão em 'Programação' iniciada por s e 7 e n, 24 de Maio de 2008. (Respostas: 3; Visualizações: 3241)

  1. s e 7 e n

    s e 7 e n Power Member

    Estou a fazer um trabalho e lá pelo meio tenho que fazer uma função para contar o numero de Linhas de um ficheiro TXT.

    Já fiz a parte de abertura do Ficheiro e contagem das linhas, mas agora queria fazer outra coisa...

    Dentro do ficheiro TXT tenho linhas vazias, levaram ENTER.
    Eu queria que ao contar as linhas salte-se essas.
    Fiz uma coisa deste genero:

    Código:
    string tab;
    
    getline(Livro, tab);         
    		
    		if (tab == "")
    			Livro.ignore();
    

    Com isto tira-me 3 linhas :( quando no ficheiro TXT devem de estar mais de 50 linhas vazias.
    Ja pensei em comprar com o ASCII do ENTER, mas também não sei o numero.

    Uma solução para isto, alguém tem?
     
  2. ApM

    ApM Power Member

    usa o strcmp
    em c nao se comparam strings com o operador ==
    penso que em c++ tambem nao!

    Código:
    getline(Livro, tab);         
    		
    if (strcmp(tab, "") == 0)
       Livro.ignore();
    
     
  3. Mr_Miguel

    Mr_Miguel Power Member

    Comparam-se sim, já que ele declarou que "tab" é do tipo "string" e não char [] ou char*. Ora o C++ define o operador == em strings como sendo a comparação caracter a caracter.

    se7en: O problema é que, muito provavelmente, as linhas às quais deste [Enter] não serem linhas que não têm caracteres nenhuns. Geralmente, as linhas em branco num ficheiro de texto têm os caracteres '\r' seguido de um '\n' ou só um '\n'. Eu diria que a comparação correcta é:

    Código:
    if (tab == "\r\n" || tab == "\n") {
         //Ignorar a linha
    }
    
    EDIT: http://www.cplusplus.com/reference/string/getline.html

    Aparentemente há um ligeiro erro na minha lógica. Parece que o '\n' é extraído mas é descartado. Sendo assim, penso que a reformulação correcta do código é:

    Código:
    if (tab == "\r" || tab == "") {
         //Ignorar a linha
    }
    
     
    Última edição: 24 de Maio de 2008
  4. s e 7 e n

    s e 7 e n Power Member

    Acho que ja esta :D
    O problema não estava na parte de "" ou "\r"...
    Esqueci-me que o numero de linhas era incrementado no directamente no for, e claro que ele fazia sempre a incrementação.
    Foi só fazer no if um NLinhas--
     

Partilhar esta Página