Permalänk

Läsa in svar i ett quiz c#

Hej!
jag håller på att göra ett quiz och läser in frågor och svar från ett textdokument.
Men mitt problem är att jag har ett svar som är tillexempel "Santa Maria"
och om användaren inte skriver in det exakt så blir det fel. Om användaren tillexempel skriver in "santa maria" eller "santamaria"
finns det någon enkel kod som kan fixa detta? så att man inte bryr sig om stora eller små bokstäver samt mellanslag?
jag har just nu löst det med to.lower vilket gör att svaret blir rätt men när jag skriver ut svaret så blir ju det ju "fel" (eftersom namn ska skrivas med stor bokstav tillexempel)

Permalänk
Medlem

Du kan ju alltid plocka in användarens svar, down casa och ta bort mellanslag, inte en jätte fin lösning men.

Permalänk
Skrivet av gonace:

Du kan ju alltid plocka in användarens svar, down casa och ta bort mellanslag, inte en jätte fin lösning men.

ja precis det är ju det jag har gjort men sen skriver jag ut svaret sen och då skriver jag ju ut det med små bokstäver även fast det ska vara stora och små

Permalänk
Medlem

Jag tänker att ett reguljärt uttryck skulle kunna hjälpa dig här:
1. Ta emot input
2. Se om input matchar enligt uttryckets regler
3. Visa output

https://stackoverflow.com/questions/9655164/regex-ignore-case...

Permalänk
Skrivet av MickeBoy:

Jag tänker att ett reguljärt uttryck skulle kunna hjälpa dig här:
1. Ta emot input
2. Se om input matchar enligt uttryckets regler
3. Visa output

https://stackoverflow.com/questions/9655164/regex-ignore-case...

precis dett är detta jag letat efter tror jag ! tack!

Permalänk
Medlem
Skrivet av simbasang:

ja precis det är ju det jag har gjort men sen skriver jag ut svaret sen och då skriver jag ju ut det med små bokstäver även fast det ska vara stora och små

ToLower ändrar inte strängen du anropar metoden på, den returnerar en ny sträng. Låt bli att skriva över det rätta svaret med den nya strängen du får bara, du behöver ju bara den nya strängen under själva jämförelsen.

Permalänk
Medlem
Skrivet av simbasang:

ja precis det är ju det jag har gjort men sen skriver jag ut svaret sen och då skriver jag ju ut det med små bokstäver även fast det ska vara stora och små

Du behöver ju inte ändra svaret, utan bara ändra strängen i själva jämförelsen.

Alltså något dylikt (hackig Java, men du bör förstå vad jag menar):

String one = "Santa Maria"; String two = "santamaria"; if (one.toLowerCase().replaceAll("\\s+", "").equals(two.toLowerCase().replaceAll("\\s+", ""))) { System.out.println("Rätt svar: " + two); }

Permalänk
Skrivet av Chimo:

Du behöver ju inte ändra svaret, utan bara ändra strängen i själva jämförelsen.

Alltså något dylikt (hackig Java, men du bör förstå vad jag menar):

String one = "Santa Maria"; String two = "santamaria"; if (one.toLowerCase().replaceAll("\\s+", "").equals(two.toLowerCase().replaceAll("\\s+", ""))) { System.out.println("Rätt svar: " + two); }

aa kanske nått sånt ska kolla på det

Permalänk
Medlem

regex /([sz]anta|saint)\s*(maria?|mary)\s*$/i matchar ganska väl. Santa Maria, santa maria, santa Maria, eller om du vill ha engelska versionen saint Mary, eller mer franska stilen Saint Mari. Du kan även ha så många space som du vill emellan orden eller efter. Tolererar även felstavningen z i början som exempel.

Permalänk
Medlem

@simbasang: Skulle rekommendera dig att använda regex(regular expressions) för att hantera dina strängar.
Finns ett webb baserat regex verktyg som du kan använda om du inte är bekant med regex sedan tidigare

Edit: Annars kan du använda "feys" lösning. Har inte kontrollerat den själv men den ser ut att fungera enligt din specifikation

Skrivet av Fey:

regex /([sz]anta|saint)\s*(maria?|mary)\s*$/i

Visa signatur

\\ i7 6700k @ 4.5 Ghz \\ GTX 1080 @ 2000/14000 \\ 16gb 3000 mhz ram \\ Z170A-G45 Gaming MSI \\ Intel 600p 256gb m.2 nvme\\ intel 520 ssd 480gb \\ ADATA SP550 120gb \\ WD 3tb hdd \\ 2 st 1tb hdd (Seagate + WD) \\ ENTHOO EVOLV ATX GLASS \\ Fractal Design Newton R3 1000W \\

[img]http://valid.x86.fr/cache/banner/7vlpqw-4.png[/img]

Permalänk
Skrivet av Fey:

regex /([sz]anta|saint)\s*(maria?|mary)\s*$/i matchar ganska väl. Santa Maria, santa maria, santa Maria, eller om du vill ha engelska versionen saint Mary, eller mer franska stilen Saint Mari. Du kan även ha så många space som du vill emellan orden eller efter. Tolererar även felstavningen z i början som exempel.

Detta ser ut som en bra lösning men då blir det ju bara till en fråga eller?

Skickades från m.sweclockers.com