Avatar billede don_r Nybegynder
16. december 2003 - 15:54 Der er 14 kommentarer og
1 løsning

String sammenligning

Hej

Jeg har et program der skal sammeligne to strenge med == og <. Jeg havde i tankerne at man kunne lave noget toupper på dem og derefter sammeligne dem med == eller <.

Er dette muligt.
Avatar billede jakobdo Ekspert
16. december 2003 - 16:03 #1
Du kan jo evt lave din egen klasse, eller overloade funktionerne == og <!
Men når du sammenligner strenge, kunne du så evt ikke "bare" bruge strcmp()?
Avatar billede don_r Nybegynder
16. december 2003 - 16:13 #2
Jeg kan se at man godt kan bruge == og <. Nu mangler jeg bare at kunne lave begge strenge til uppercase eller lowercase før jeg sammenligner. Er der nogle der ved hvordan dette gøres ?
Avatar billede jakobdo Ekspert
16. december 2003 - 16:33 #3
Kan du evt bruge: toupper
Avatar billede jakobdo Ekspert
16. december 2003 - 16:34 #4
Findes i denne: <ctype.h>
Avatar billede don_r Nybegynder
16. december 2003 - 16:48 #5
Det gælder da kun for char ??
Avatar billede jakobdo Ekspert
16. december 2003 - 19:08 #6
Du har ret..
Prøv: strupr()
Avatar billede arne_v Ekspert
16. december 2003 - 20:27 #7
Du burde kunne bruge følgende til at konvertere en STL string til uppercase:

string::iterator it = s.begin();
while(it != s.end())
{
    *it = toupper(*it);
    it++;
}
Avatar billede don_r Nybegynder
17. december 2003 - 17:20 #8
arne_v >> smid lige et svar så kan du få pointene
Avatar billede arne_v Ekspert
17. december 2003 - 18:22 #9
svar
Avatar billede ttn.bonk Nybegynder
19. december 2003 - 00:02 #10
Bemærk at med toupper kan du ikke sammenligne strenge med fx. danske tegn som æ,ø og å. toupper virker kun med bogstaverne a-z.

Mener der findes en rutine i C som strcol eller lignede som afhænger af hvilket sprog (locale) som er sat på din maskine (PC).

Mvh Torben.
Avatar billede arne_v Ekspert
19. december 2003 - 00:05 #11
Det er ikke korrekt.

toupper skal respektere locale ifølge standarden.
Avatar billede bertelbrander Novice
19. december 2003 - 00:18 #12
C-standarden skriver:

7.4.2.2 The toupper function
Synopsis
#include <ctype.h>
int toupper(int c);
Description
The toupper function converts a lowercase letter to a corresponding uppercase letter.
Returns
If the argument is a character for which islower is true and there are one or more corresponding characters, as specified by the current locale, for which isupper is true, the toupper function returns one of the corresponding characters (always the same one for any giv en locale); otherwise, the argument is returned unchanged.

cygwin-gcc påstår at 'æ' ikke er lowercase og ændrer ikke 'æ' til 'Æ'.
Avatar billede ttn.bonk Nybegynder
19. december 2003 - 19:40 #13
Hm,

så tager jeg måske fejl :-). Mener at huske at jeg en gang ikke kunne få det til at virke, men måske var det strcasecmp?

Jeg giver mig efter at have set bertelbrander's "paste" af en beskrivelse :-(.

Mvh Torben.
Avatar billede arne_v Ekspert
19. december 2003 - 20:01 #14
Nu skal du ikke misforstå mig: der er udne tvivl masser af toupper
derude som ikke kan klare ÆØÅ.

Men med passende opsætning af locale så burde de virke.
Avatar billede bertelbrander Novice
19. december 2003 - 20:54 #15
cygwin kan ikke klare æøå, selv med passende opsætning af locale.

Man kan godt læse standarden som at cygwin "har lov" til at gøre som den gør.
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
Kurser inden for grundlæggende programmering

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