Avatar billede reon Nybegynder
01. juni 2008 - 21:22 Der er 18 kommentarer

Convert tal?

Hej Hej

Jeg vil godt lave en convert af nogle tal men hvordan

jeg har en string tal = console.ReadLine();

hvor jeg indtaster 11110000

vil så have den til at lave 1 om til 0 og 0 om til 1
så den udskriver 00001111 istedet
Avatar billede Slettet bruger
01. juni 2008 - 21:32 #2
Kan man ikke gøre det sådan:

tal.replace("1","0");
tal.replace("0","1");
Avatar billede Slettet bruger
01. juni 2008 - 21:33 #3
Med store R'er selvfølgelig. Sådan:

tal.Replace("1","0");
tal.Replace("0","1");
Avatar billede ladyhawke Novice
01. juni 2008 - 21:39 #4
jo det kan man da, hvis det er den eneste form for binær operation man ønsker, men det er stærkt begrænsende, hvis man senere vil udbygge funktionaliteten. Jeg gætter på at de binære tal bliver brugt som flag eller lignende.
Avatar billede reon Nybegynder
01. juni 2008 - 21:42 #5
using System;
using System.Collections.Generic;
using System.Text;

namespace Bin
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("indtast binnær :");
            string a = Console.ReadLine();
            int tal;
            tal = Convert.ToInt32(a);
            tal.Replace("1", "0");
            tal.Replace("0", "1");
            Console.WriteLine(" Binær :" + tal);
        }
    }
}

Dur ikke :(
Avatar billede Slettet bruger
01. juni 2008 - 21:47 #6
Det er fordi du ikke kan replace en int-værdi. Du bliver nødt til at lade den være en string hvis du vil gøre det på den måde:

using System;
using System.Collections.Generic;
using System.Text;

namespace Bin
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("indtast binnær :");
            string a = Console.ReadLine();
            a.Replace("1", "0");
            a.Replace("0", "1");
            Console.WriteLine(" Binær :" + a);
        }
    }
}

Du kan konvertere det til en int efter du har replaced:


using System;
using System.Collections.Generic;
using System.Text;

namespace Bin
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("indtast binnær :");
            string a = Console.ReadLine();
            a.Replace("1", "0");
            a.Replace("0", "1");
            int tal = int.parse(a);
            Console.WriteLine(" Binær :" + tal.ToString);
        }
    }
}
Avatar billede Syska Mester
01. juni 2008 - 21:52 #7
string a = "010100000001";
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] == '0')
                    sb.Append('1');
                else
                    sb.Append('0');
            }

            MessageBox.Show(sb.ToString());

Virker ... men der findes sikkert bedre måder :-)

// oUT
Avatar billede Syska Mester
01. juni 2008 - 21:56 #8
kaloer:
Du glemmer at assign det du har replaced til en ny string ... :-( ... men hvis du gør det ... så ender du jo med enten 0 eller 1

pseudo kode:
string = "1010";
Replace "0" med "1"
Stringen holdegolder nu: 1111
Replace "1" med "0"
Stringen holdegolder nu: 0000

Sådan kan man desvære ik' ... ellers er der noget  jeg har misforstået :-)
Avatar billede reon Nybegynder
01. juni 2008 - 21:56 #9
using System;
using System.Collections.Generic;
using System.Text;

namespace Bin
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("indtast binnær :");
            string a = Console.ReadLine();
            a.Replace("1", "0");
            a.Replace("0", "1");
            Console.WriteLine(" Binær :" + a);
        }
    }
}

Jeg er ikke med. jeg indtaster 11110000 og den udskriver det sammen, ikke 00001111
Avatar billede erikjacobsen Ekspert
01. juni 2008 - 22:05 #10
Console.WriteLine("indtast binnær :");
            string a = Console.ReadLine();
            a=a.Replace("1", "x");
            a=a.Replace("0", "1");
            a=a.Replace("x", "0");
            Console.WriteLine(" Binær :" + a);
Avatar billede Slettet bruger
01. juni 2008 - 22:11 #11
Nåhh, ja. Det er vel Buzz'z eller erikjacobsens måde der får det rigtige resultat.
Avatar billede Syska Mester
02. juni 2008 - 00:19 #12
reon:
Se min forklaring på hvorfor det går galt ...
Du laver 2 loop igennem det, hvilket ender ud med enten 1 eller 0 ...

Det kan løses som jeg gør det i mit første ... eller som Erik gør ...

Måske er der performance forskel, men så længe det kune skal gøres 1 gang, har det nada at sige ...

// oUT
Avatar billede arne_v Ekspert
02. juni 2008 - 01:50 #13
Hvis man er på .NET 3.5 og man har hang til lidt tricky kode så kan man faktisk:

string s2 = new string(Array.ConvertAll(s1.ToCharArray(), (c) => c == '1' ? '0' : '1'));
Avatar billede md_craig Nybegynder
03. juni 2008 - 12:43 #14
Der er jo ikke noget i vejen for at bruge lidt af det samme fany pansy ness i tidligere versioner, kan ikke huske hvor langt tilbage dette gælder dog:

string s2 = new string(
  Array.ConvertAll(
      s1.ToCharArray(),
      delegate (char c) { return c == '1' ? '0' : '1'; }
  ));
Avatar billede Syska Mester
04. juni 2008 - 15:31 #15
svar ... og nice måde Arne :-)
Avatar billede mysitesolution Nybegynder
04. juni 2008 - 15:31 #16
Måske man lige skulle finde ud af, hvad resultatet skal være hvis der indtastes andet end 0 og 1???

Så vidt jeg kan se, er de forskellige metoder ikke ret venlige mod andet end 0 og 1. Nogle ignorere andre bogstaver totalt, en laver andre bogstaver til 0 og en laver 'x' til 0'taller ;)

Måske man skulle finde ud af, om der skulle smides exceptions? eller det skal håndteres på anden vis.
Avatar billede mysitesolution Nybegynder
04. juni 2008 - 15:34 #17
Noget andet er, hvis du skal bruge det som binær senerehen, hvorfor så ikke konvertere til int først, og så bare skifte dem rundt bagefter? vil give pænere kode og vil være hurtigere (skal sikkert ikke bruges, men alligevel)
Avatar billede Syska Mester
06. juni 2008 - 00:52 #18
Ja ... men ikke hvad der bliver spurgt om ... vi kan altid komme udover hvad spørgsmålet reelt handler om ... :-)

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester