mboost-dp1

Lidt c# streng-magi


Gå til bund
Gravatar #1 - milandt
24. jan. 2012 16:38
Jeg sidder lige og leger lidt med strenge i c#, og jeg står over for følgende udfordring:

"str1 str2 str3 str4"


skal laves om til

"str1 str2 str3 str4 str1str2 str2str3 str3str4 str1str2str3 str2str3str4 str1str2str3str4"


Bemærk at f.eks. str1str3 aldrig behøver optræde i resultatet, kun de ord der står op af hinanden.

Jeg er ikke kommet op med noget endnu, som en 1. års datamatiker ikke kunne have gjort bedre :)
Gravatar #2 - arne_v
24. jan. 2012 16:54
#1

Det ligner en 3 dobbelt for løkke:
for antal ord
for start ord
for efterfølgende ord
Gravatar #3 - Sand.
24. jan. 2012 17:16
Kan kun give Arne ret!

Skal du skrive nogle potensmængder op, eller?
Gravatar #4 - milandt
24. jan. 2012 17:39
Det er til en søgeside, hvor søgninger skal foretages både med og uden mellemrum for alle kombinationer af ord der står op af hinanden når de indtastes.

Eks. skal en søgning på "Office 2011" søge på både "Office", "2011" og "Office2011". Den simple løsning var bare at fjerne alle mellemrum, men det bliver lidt flere linjers kode når der er mere end ét mellemrum.
Gravatar #5 - BlackFalcon
24. jan. 2012 17:49
milandt (4) skrev:
Den simple løsning var bare at fjerne alle mellemrum, men det bliver lidt flere linjers kode når der er mere end ét mellemrum.


Du kan med en linie kode erstatte alle mellemrum med "".
s = s.Replace(" ", "");
Gravatar #6 - milandt
24. jan. 2012 17:51
BlackFalcon (5) skrev:
Du kan med en linie kode erstatte alle mellemrum med "".
Ja, men kravene i #1 skal stadig opfyldes.
Gravatar #7 - m910q
24. jan. 2012 18:17
Gravatar #8 - arne_v
24. jan. 2012 18:19

using System;
using System.Text;

namespace E
{
public class Program
{
public static string JustDoIt(string s)
{
string[] parts = s.Split(' ');
StringBuilder sb = new StringBuilder();
for(int i = 0; i < parts.Length; i++)
{
for(int j = 0; j < parts.Length - i; j++)
{
if(sb.Length > 0) sb.Append(" ");
for(int k = 0; k <= i; k++)
{
sb.Append(parts[j+k]);
}
}
}
return sb.ToString();
}
public static void Main(string[] args)
{
string s = "str1 str2 str3 str4";
string s2 = "str1 str2 str3 str4 str1str2 str2str3 str3str4 str1str2str3 str2str3str4 str1str2str3str4";
string s3 = JustDoIt(s);
Console.WriteLine(s);
Console.WriteLine(s2);
Console.WriteLine(s3);
Console.ReadKey();
}
}
}
Gravatar #9 - arne_v
24. jan. 2012 18:20
#7

Join er faktisk en løkke.
Gravatar #10 - m910q
24. jan. 2012 18:22
Edit: Ah ja, nvm... Troede du mente split
Gravatar #11 - milandt
24. jan. 2012 20:19
#7+#8 langt mere kompakt end mit eget udgangspunkt. Mange tak for hjælpen!
Gravatar #12 - m910q
24. jan. 2012 20:38
Bare husk at kompakt ikke nødvendigvis er godt.

Mit kode er kun proof of concept, jeg ville ikke kode det sådan i et seriøst projekt...
Gravatar #13 - Brugernavn
24. jan. 2012 21:50
Jeg vil nok lande på noget i nærheden af arnes. Man bør bruge stringbuilders, når der skal sættes så mange tekststykker sammen.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login