Jump to content
euaccount

Contar e Ordenar Diferentes Caracteres em Strings

Recommended Posts

euaccount

string = Hello World

eu quero ter uma função que passa essa string para outra mas sem repetir caracteres : (Helo"espaço"Wrd)

Como e que isto é possível?

Em C sei podia usar um vector

e usar um for com um if para verificar todos os caracteres ja adicionados a nova string, mas C# nao tem vectors... :wallbash:

Share this post


Link to post
Share on other sites
euaccount

Pelo o que estive a ver nao existem vectors desde a versao 2.0 do .NET e os arrays são de tamanho fixo

Share this post


Link to post
Share on other sites
herty

Pelo o que estive a ver nao existem vectors desde a versao 2.0 do .NET e os arrays são de tamanho fixo

Não sei onde viste isso,

Mas repara.

string = Hello World

o que tas a fazer aqui não é mais que declarar um vector char[].

string a= "Hello World";
char b = a[1];
char c = a[4];

Experimenta e ve o que fica nos char "a" e "b" :)

Arrays de tamanho fixo??

Repara no codigo abaixo

char[] arrayChar = new char[200];
arrayChar[0]='a';

int[] arrayInt = new int[20];
arrayInt [0] = 1;

Cump.

Share this post


Link to post
Share on other sites
skiller10

Basta teres um for que percorra a string e verifique se o caracter é diferente do anterior, algo do genero:

for(int i=1, p=0; i<tamanho_da_string; i++)

    if(str != str[i-1])

            nova_str[p++] = str;


"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Share this post


Link to post
Share on other sites
euaccount

Ahm obrigado acho que sempre preciso de comprar um livrinho de C#

Mais uma vez obrigado óptima explicação.

Até vou contar uma anedota, isto é para eu fazer um compressor de dados.

Share this post


Link to post
Share on other sites
euaccount

Obrigado skiller10 mas eu preciso mesmo de ver a toda a string e estas podem ter bem... nao sei mas podem ser muitos grandes.

Uma ultima ajuda se faz favor o que e que esta mal?

            string input = "Hello World";
            string output ="";
            int z,x;

            //ler a string input
            for (z=0; z<input.Length ; z++)
            { 
                x=0;
                //ler a string output
                for(x = 0; x<output.Length; x++)
                {
                    //verificia se é diferente de algum caracter da string output
                    if (input[z] != output[x])
                    {
                        //se for diferente adiciona o caracter a string output
                        x++;
                        output += input[z];
                    }
                }
            }
            debug(output);

Share this post


Link to post
Share on other sites
skiller10

Eu pensava que nao querias caracteres iguais juntos :x

Nao vi o que está mal na tua função porque vi logo à partida que a eficiência nao é a melhor, tenta algo assim:

string str_orig = "qualquer coisa"; //String original;
string str_dest; //String onde irá ficar o texto comprimido;
bool chars[26]; //Array de bools para ver se o caracter já foi usado;
int size = str_orig.Lenght; //Tamanho da string original;
int pos = 0; //Posição da string de destino onde será introduzido o char; 

for(int i=0; i<26; i++) //Inicializar o array de caracteres usados:
    chars[i] = false;
    
for(int i=0; i<size; i++) //Percorrer a string original toda
    if(!chars[(str_orig[i]-'a')]){ //Se o caracter ainda nao existir na string de destino:
        chars[(str_orig[i]-'a')] = true; //Marcar como já existe apartir de agora;
        str_dest += str_orig[i]; //Adicionar o caracter na string de destino
    }


"Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."

Share this post


Link to post
Share on other sites
herty

Eu pensava que nao querias caracteres iguais juntos :x

Nao vi o que está mal na tua função porque vi logo à partida que a eficiência nao é a melhor, tenta algo assim:

string str_orig = "qualquer coisa"; //String original;
string str_dest; //String onde irá ficar o texto comprimido;
bool chars[26]; //Array de bools para ver se o caracter já foi usado;
int size = str_orig.Lenght; //Tamanho da string original;
int pos = 0; //Posição da string de destino onde será introduzido o char; 

for(int i=0; i<26; i++) //Inicializar o array de caracteres usados:
    chars[i] = false;
    
for(int i=0; i<size; i++) //Percorrer a string original toda
    if(!chars[(str_orig[i]-'a')]){ //Se o caracter ainda nao existir na string de destino:
        chars[(str_orig[i]-'a')] = true; //Marcar como já existe apartir de agora;
        str_dest += str_orig[i]; //Adicionar o caracter na string de destino
    }

So tens uma coisa que ta "menos bem" :)

// Isto é um mau metodo de trabalhar com uma string
str_dest += str_orig[i]; //Adicionar o caracter na string de destino
// Isto é uma melhor forma de trabalhar com strings
str_dest = string.Concat(str_dest,str_orig[i]);

Cump.

Share this post


Link to post
Share on other sites
euaccount

Obrigado a todos esta resolvido

public string selectChars(string input)
        {
            string result = "";
            foreach(char c in input)
            {
              if (!result.Contains( c ) )
            result += c;
            }
            debug (result);
            textBox1.Text = result;
            return result;
            }

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.