Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Ta ut varje bokstav i en sträng

Postades av 2005-02-18 18:24:59 - Magnus Jonsson, i forum asp.net generellt, Tråden har 13 Kommentarer och lästs av 546 personer

Hej,

Jag håller på med en liten applikation och jag vill ta ut varje bokstav i en sträng.

<code>
public string Ord(string strOrd)
{
int intOrdLength = strOrd.Length;
int ctr = 0;

for(ctr = 0; ctr <=intOrdLength; ctr++)
{
int intBokstav = strOrd[ctr];
}

return intBokstav.ToString();
}
</code>

Sådär har jag gjort, jag undrar lite över hur kan man göra så att intBokstav får ett nytt namn för varje gång det repeatas, en tanke är att man gör så att den får intBokstav + ctr så att det blir intBokstav0, intBokstav1, etc. Går det på nått sätt?

Meningen med applikationen är att den ska ta ut alla bokstäver ur en sträng för att sedan slumpa fram vilka av bokstäverna i ordet som ska visas.

Finns det någon annan metod för att lösa det här på som är bättre?


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-20 10:06:33 - Henrik Johansson

Hej!

Du kan väl göra precis som du säger:
<code>
public string Ord(string strOrd, int antalBokstaver)
{
int intOrdLength = strOrd.Length;
char[] wordChars = strOrd.ToCharArray(); // Strängen som char-arr
char[] resultChars = new char[antalBokstaver]; // De bokstäver som ska returneras
for (int i=0;i<antalBokstaver;i++)
{
Random r = new Random();
// Välj slumpvis ut en bokstav att sätta in på plats i i strängen vi ska returnera
resultChars[i] = wordChars[r.Next(wordLength)];
}
string s = new string(resultChars);
return s;
}


</code>

Om du vill ha bokstäverna i en följd (som i ordet) kan du ju köra två for loopar, först generera upp så många slumptal du vill ha, sedan sortera dem i storleksordning och sedan hämta de bokstäverna ifrån originalsträngen.

Lycka till!
/Henke


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-20 17:18:44 - Magnus Jonsson

Okej,

Har testat den där koden nu och försökt få det att fungera utan att ha lyckats.
Det blir samma bokstav som slumpas fram tex. om strOrd är tjena blir det ttttt.

Skulle vilja slumpa så att det blir jtnea eller någon annan ordning utav bokstäverna.


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-21 11:16:16 - Anders Vikström

Hej Magnus,

Jag har nog inte heller riktigt fattat exakt vad du är ute efter, men här kommer en liten klass som möjligen kan vara till lite hjälp:

public class StringScrambler
{
    Random seedRandomizer;

    public StringScrambler()
    {
        seedRandomizer = new Random();
    }

    public string ScrambleString(string unscrambledString)
    {
        int length = unscrambledString.Length;
        char[] scrambledChars = new char[length];
        Random randomizer = new Random(seedRandomizer.Next(int.MaxValue));

        foreach (char chr in unscrambledString)
        {
            int index;

            do
            {
                index = randomizer.Next(length);
            } 
            while (scrambledChars[index] != 0);

            scrambledChars[index] = chr;                
        }

        return new string(scrambledChars);
    }
}


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-21 18:07:24 - Magnus Jonsson

Tack,

Det där fungerade fint!

Jag har en fråga om en sak i koden.

Random randomizer = new Random(seedRandomizer.Next(int.MaxValue));

Det är seedRandomizer.Next(int.MaxValue) som jag undrar över om vad den gör.


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-22 08:30:57 - Anders Vikström

Tja, det finns kanske smartare sätt att göra det på, men min tanke var att säkerställa att randomizer baseras på ett nytt seed-värde varje gång den skapas. Om man skippar argumentet till konstruktorn baseras seed-värdet på systemklockan och anropar man ScrambleString flera gånger kan man få samma seed-värde om klockan inte hunnit räknats upp.

(Jag ser också att jag kodade lite slarvigt. Dels hanterar jag inte när unscrambledString innehåller null-tecken och dels förutsätter jag att scrambledChars instansieras med null-tecken.)


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-22 15:32:34 - Magnus Jonsson

Okej,

Jag kom på att tänka en grej, även fast chansen inte är stor att det inträffar me. Det jag tänker på är att ordet slumpas fram till det "rätta ordet", att tex. hejsan slumpas till hejsan, chansen är ju inte stor som sagt men den finns ju.

scrambledChars == unscrambledString


Operator '==' cannot be applied to operands of type 'char[]' and 'string'

Hur ska man jämföra dom och se om dom är lika?


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-23 00:16:54 - Jan Bulér

Här är en variant på StringScrambler som inte kräver att scrambledChars initieras med null-tecken samt att man aldrig behöver loopa fler varv än vad längden på unscrambledString är.

<code>
using System;

namespace StringScrambler
{
/// <summary>
/// Summary description for StringScrambler.
/// </summary>
public class StringScrambler
{
Random seedRandomizer;

public StringScrambler()
{
seedRandomizer = new Random();
}

public string ScrambleString(string unscrambledString)
{
int length = unscrambledString.Length;
char[] scrambledChars = unscrambledString.ToCharArray();
Random randomizer = new Random(seedRandomizer.Next(int.MaxValue));

for(int index = 0; index < length; index++)
{
swap(ref scrambledChars[index], ref scrambledChars[randomizer.Next(length)]);
}
return new string(scrambledChars);
}

private void swap(ref char c1, ref char c2)
{
char tmp = c1;
c1 = c2;
c2 = tmp;
}
}
}
</code>

//
Janne


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-24 09:14:51 - Anders Vikström

Hej Magnus,

Visst är det så att man kan få tillbaks samma sträng som man skickar in i metoden. I följande version försöker jag att undvika detta:

    public class StringScrambler
    {
        Random seedRandomizer;

        public StringScrambler()
        {
            seedRandomizer = new Random();
        }

        public string ScrambleString(string unscrambledString)
        {
            if (NumberOfUniqueCharacters(unscrambledString) < 2)
            {
                return unscrambledString;
            }

            int length = unscrambledString.Length;
            char[] unscrambledChars = unscrambledString.ToCharArray();
            char[] scrambledChars = unscrambledString.ToCharArray();
            Random randomizer = new Random(seedRandomizer.Next(int.MaxValue));
            string scrambledString;

            do
            {
                for(int index = 0; index < length; index++)
                {
                    Swap(ref scrambledChars[index], ref scrambledChars[randomizer.Next(length)]);
                }

                scrambledString = new string(scrambledChars);
            }
            while (scrambledString == unscrambledString);

            return scrambledString;
        }

        private void Swap(ref char c1, ref char c2)
        {
            char tmp = c1;
            c1 = c2;
            c2 = tmp;
        }

        private int NumberOfUniqueCharacters(string unscrambledString)
        {
            int count = 0;

            if (unscrambledString != null && unscrambledString.Length > 0)
            {
                bool[] usedChars = new bool[char.MaxValue];

                foreach (char chr in unscrambledString)
                {
                    if (!usedChars[chr])
                    {
                        usedChars[chr] = true;
                        count++;
                    }
                }
            }

            return count;
        }
    }


Notera att jag ugått från Jans optimerade lösning. Notera även att man i retur fortfarande kan få långa strängar där bara två tecken har bytt plats. Det vore naturligtvis bättre om graden av olikhet baserades på antal unika tecken i orginalsträngen. Och appropå unika tecken så misstänker jag att metoden NumberOfUniqueCharacters kan optimeras.


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-24 20:43:08 - Magnus Jonsson

Okej, tack!

Jag har en liten fråga :)

Vad fyller den här koden för funktion?

		private void Swap(ref char c1, ref char c2)
		{
			char tmp = c1;
			c1 = c2;
			c2 = tmp;
		}


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-24 22:47:00 - Per Persson

Den byter plats på värdena i de två variabler som skickas till den.

Om t.ex. x = 3 och y = 7 före anropet Swap(x, y), så är x = 7 och y = 3 efter anropet.


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-25 10:46:57 - Magnus Jonsson

Okej, används den till för att det ska bli en större "mix"?


Svara

Sv: Ta ut varje bokstav i en sträng

Postades av 2005-02-25 10:57:02 - Per Persson

Den används helt enkelt för att utföra mixningen.

for(int index = 0; index < length; index++)
{
    Swap(ref scrambledChars[index], ref scrambledChars[randomizer.Next(length)]);
}

Koden byter plats på tecknet i position index och tecknet på en slumpvis vald position.


Svara

Sv:Ta ut varje bokstav i en sträng

Postades av 2005-02-25 12:45:00 - Magnus Jonsson

Aha, okej. Nu hajar jag.

Tack för all hjälp!


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 602
27 953
271 705
5 703
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies