Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 a 10 de 23
  1. #1

    [duvida]Invertendo strings

    Bom pessoal resolvi aprender C ou pelo menos o básico para que eu me de bem na parte de programação de qualquer faculdade
    Na verdade é porque o C++ Builder veio na instalação do Delphi 2009 então eu resolvi dar uma utilidade pra ele
    ai estou fazendo projetinhos básicos,calculadora,brincando com structs e tal.
    Ai eu resolvi fazer um programa que inverte a string
    ai eu montei um algoritmo assim
    Código:
    le a string digitada
    pega tamanho da string
    para i = 0 até tamanho da string
    imprime caracter "tamanho da string  - i "

    e o código ficou assim

    Código:
    //---------------------------------------------------------------------------
    
    #include <stdio.h>
    #pragma hdrstop
    #include <conio.h>
    #include <tchar.h>
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char str[255];
    	int len;
    	int i;
    	printf("manipulação de strings \n");
    	scanf("%s",str);
    	len = strlen(str);
    	for (i = 0; i < len -1; i++) {
    	printf("%s",str[len-i]);
    
    	}
    	return 0;
    }
    //---------------------------------------------------------------------------
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#)


    ----- ----- - -
    Blog AcidezAteia Twitter Youtube

  2. #2

    Re: [duvida]Invertendo strings

    Olá,
    o primeiro problema do teu codigo é no for()
    vc ta fazendo: "enquanto a variavel "i" não for o penúltimo character de str ..."
    o certo é "enquanto a var "i" não for último character de str..."
    Código:
    for(i=0; i<len; i++)
    no printf() que mostra o resultado, vc ta querendo mostrar um character por vez ("%c") e não uma string ("%s"), certo?

    ainda nesse printf, quando a var "i" for igual a 0, str[len-0] o programa tentará mostrar um character que se situa após o último char da string.
    Lembre-se de que em C a primeira posicao de um array é 0, a segunda 1, a terceira 2...etc, portanto str[len] vai acessar uma posição fora do range da string...

    Uma dica: não seria melhor vc começar a ler a string de trás pra frente? Pense em como tu pode arrumar o teu for() pra fazer dessa maneira.

    boa sorte!

  3. #3
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Ilha de Itaparica - BA
    Posts
    2.049

    Re: [duvida]Invertendo strings

    e aí amigo Rodrigo, vc esta programando em C certo? então, por convensão siga o padrão ANSI C, as diretivas #pragma são especificas do teu compilador e alguns dos teus headers exceto o stdio.h n são do padrão tmb =|

    seu conceito no for estava certo, vc só precisava dar um "reverse" nele, seu código:

    Código:
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char* argv[])
    {
    	char str[255];
    
        int len;
        int i;
    
        printf("manipulação de strings \n");
    	scanf("%s", str);
        // fgets(str, 255, stdin); 
    
        len = strlen(str);
    
        for (i = len; i > 0; i--) 
    	{
    		// putchar( str[i - 1]);
    	    printf("%c", str[i - 1]);
        }
    
    	fflush(stdin);
        getchar();
        return 0;
    }
    abrass


    I must not fear. Fear is the mind killer.

  4. #4

    Re: [duvida]Invertendo strings

    Agradeço os comentarios ,mas eu ganho alguma coisa seguindo os padrões da ANSI C?
    melhoraria algo na performance ?
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#)


    ----- ----- - -
    Blog AcidezAteia Twitter Youtube

  5. #5
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Ilha de Itaparica - BA
    Posts
    2.049

    Re: [duvida]Invertendo strings

    na performance realmente n sei dizer, mas teu código ganha legibilidade e portabilidade de compilador para compilador.

    n é obrigatório seguir, só uma recomendação forte msm

    abrass


    I must not fear. Fear is the mind killer.

  6. #6

    Re: [duvida]Invertendo strings

    Entendi,brigadão ai pra todos!
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#)


    ----- ----- - -
    Blog AcidezAteia Twitter Youtube

  7. #7
    Hacker Avatar de blackwinner
    Data de Ingresso
    Dec 2006
    Localização
    Aqui
    Posts
    1.273

    Re: [duvida]Invertendo strings

    Não siga a ANSI C à não ser que você queira programar em C mesmo.
    Para programação user-mode, o C++ é melhor.
    Só o fato de não se poder fazer:
    for(int iCont =0; iCont<2;iCont++)

    Já é uma chateação.
    É bom conhecer a ANSI C mas se lembre que seguir ela sempre à risca, vai te dar problemas.
    Eu realmente prefiro linkar por exemplo, as libs, diretamente por linha de código com #pragma comment(lib,blabla).

    Mas sempre que não for código específico, use os defines do C.

    Código:
    #ifndef NAO_SOU_O_VISUAL_CPP
     #pragma comment(lib,'user32.lib')
    #endif
    Os defines do C/++ são justamente feitos para facilitar sua vida.
    Você pode fazer o mesmo com headers.

    Código:
    #ifdef SOU_WINDOWS
     #include <conio.h>
    #endif
    Só se lembre de estruturar muito bem seu código para facilitar a portabilidade.
    Se algo só for feito pro windows mesmo, então mande pro inferno essa tal de portabilidade.. caso contrário, não use nada que não seja portável à não ser que não haja outra opção, ai você passa à usar os defines para mesmo nesses casos, manter o código portável.
    Mas o linux por si só já não segue a ANSI C e é duramente criticado por isso; então manter a portabilidade é lindo no papel mas na realidade, em programas grandes, se torna mais complicado do que fazer um site para todos os tipos de browsers.
    Você no final, tentando manter a portabilidade, deixa o código bem cheio de gambiarras.
    Então o jeito, é quase sempre tentar manter a portabilidade o máximo possível para ter que corrigir poucas coisas na hora de compilar em outras plataformas.

  8. #8

    Re: [duvida]Invertendo strings

    @Rodrigo, podes fazer isso em metade do tempo. Basta percorreres a string até metade e depois ires fazendo um swap das posições simétricas.
    Convertendo isto em código fica:
    Código:
    char str[] = "Localhost Rox", ch;
    int len = strlen(str), k = 0;
    for(k = 0; k < len / 2; k++) {
      ch = str[k];
      str[k] = str[len - k - 1];
      str[len - k - 1] = ch;
    }
    printf("A string invertida: %s\n", str);
    É só isso, em vez de ter complexida O(len) tem complexidade O(len / 2).

  9. #9
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Ilha de Itaparica - BA
    Posts
    2.049

    Re: [duvida]Invertendo strings

    n é obrigatório seguir, só uma recomendação forte msm
    abrass


    I must not fear. Fear is the mind killer.

  10. #10
    Hacker Avatar de blackwinner
    Data de Ingresso
    Dec 2006
    Localização
    Aqui
    Posts
    1.273

    Re: [duvida]Invertendo strings

    Cara, a notação Big O é linda também mas não segue ela não.
    Nesse caso em específico, dependendo do tamanho da string, o algoritmo do guga e do rodrigo é mais rápido ou de mesma velocidade.
    Você tem que pensar no assembly gerado.

    Depois quando eu tiver tempo, eu vou depurar ambos os algoritmos sem otimização do compilador e mostrar porque.

    Flws, abrs.

Tópicos Similares

  1. Encriptando Strings
    Por Marcelo Moraes no fórum Delphi
    Respostas: 0
    Último Post: 08 Jul 2010, 17:48
  2. Arrays e Strings PHP
    Por rogerphp no fórum HTML, XHTML e CSS
    Respostas: 1
    Último Post: 17 Aug 2009, 13:37
  3. Strings em C++
    Por dark_side no fórum C,C++
    Respostas: 4
    Último Post: 10 Dec 2006, 03:10

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •