Avatar billede ibhansen Nybegynder
14. august 2006 - 19:52 Der er 12 kommentarer og
1 løsning

String til integer

Jeg har problemer med at konvertere et array of string til array of integers. Problemet ligger i linien "Sum+=Nr[i]*Check[i];" hvor Nr[i] er af typen string og Check[i] er af typen integer.

bool checkcpr(string CPR)
{
  string Nr="";
  for(int i=0; i<CPR.length(); i++)
    if(isdigit(CPR[i]))
      Nr+=CPR[i];
      cout << "Status:" << endl << endl;
        if(Nr.length()!=10)
        {
          cout << " - Fejl i laengden" << endl;
        }
        else
        {
          cout << " - Laengde OK" << endl;
                     
        }     
      int Check[] = { 4, 3, 2, 7, 6, 5, 4, 3, 2, 1 };
      int Sum(0);
        for(int i=0; i<10; i++)
          Sum+=Nr[i]*Check[i];
            if(Sum%11==0) {
              cout << " - CPR gyldigt" << endl;
              return 0;
              }
              else
              {
              cout << " - CPR ugyldigt" << endl;
              return 1;
              }
}
Avatar billede arne_v Ekspert
14. august 2006 - 20:00 #1
Nr er af typen string
Nr[i] er vel af typen char

formentlig virker den lidt grimme:

Sum+=(Nr[i]-'0')*Check[i];
Avatar billede mcgoat Nybegynder
14. august 2006 - 20:04 #2
Sum+=(int)Nr[i]*Check[i];

kan du ikke bare caste string til int?
Avatar billede arne_v Ekspert
14. august 2006 - 20:15 #3
Nr = "123"

mener jeg at (int)Nr[i] vil returnere 49, 50 og 51
Avatar billede mcgoat Nybegynder
14. august 2006 - 20:18 #4
ohh :)

hvad med atoi så?
Avatar billede mcgoat Nybegynder
14. august 2006 - 20:24 #5
skal selvfølgelig ikke prøve at belære mesteren :P
prøver bare at blive klogere :)
Avatar billede arne_v Ekspert
14. august 2006 - 20:25 #6
den virker men kraever en char*

-'0' er nemt og bekvemt

omend ikke specielt type sikkert
Avatar billede mcgoat Nybegynder
14. august 2006 - 20:29 #7
troede bare ikke man kunne lave en int ved at minuse en char med en anden, det er vel det der sker?
Avatar billede ibhansen Nybegynder
14. august 2006 - 20:42 #8
Arne_V det fungerer. Mange tak for hjælpen.
Avatar billede nielle Nybegynder
14. august 2006 - 20:48 #9
Når nu du har fået det til at fungere, så synes jeg også at du bør vide at der ikke går så forfærdeligt mange år før at CPR registeret dropper modulus-11 tjekket:

http://www.cpr.dk/Index/dokumenter.asp?o=2&n=0&h=2&d=647&s=4
Avatar billede ibhansen Nybegynder
14. august 2006 - 20:57 #10
nielle: Det er uden betydning da det en skole opgave, men tak for oplysnigen.


Foresten må man spørge hvor følgende fungerer (Nr[i]-'0') ? Kan ikke lige regne det ud:)
Avatar billede arne_v Ekspert
14. august 2006 - 21:04 #11
i C/C++ kan man mixe char og int rimeligt frit

i ASCII tabellen er:

'0' = 48
'1' = 49
'2' = 50
....
'9' = 57

og det goer at mens (int)c giver 48,49,50,... saa giver c-'0' faktisk 0,1,2,...

for dem som savler i sprog finesser, saa er '0' en char i C++ men en int i C
(check selv med sizeof)
Avatar billede arne_v Ekspert
14. august 2006 - 21:10 #12
og et svar
Avatar billede mollevp Nybegynder
15. august 2006 - 01:03 #13
En anden måske mere c++'isk måde ville være at bruge en stringstream f.eks.

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    std::string cpr = "1234556";
    std::stringstream ss(cpr);

    int i;
    ss >> i;
    std::cout << i << std::endl;
    return 0;
}
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