Forum: [C++] Kodningsproblem

Forum huvudsida -> Programmering -> [C++] Kodningsproblem

Sidor: 1

Till botten

WiK 20:54 - 13:e Mars 2007 | Post #1
Medlem
Inlägg: 6


Skicka PM

nvm


Senast redigerad 09:04 - 14:e Mars 2007


Slash 20:57 - 13:e Mars 2007 | Post #2
Medlem
Inlägg: 141


Skicka PM
Ska strängen "1134" räknas som 11, 13, 34 eller som 11 och 34?

-------------------------
Ingen sigantur!



WiK 21:02 - 13:e Mars 2007 | Post #3
Medlem
Inlägg: 6


Skicka PM


oo


Senast redigerad 09:05 - 14:e Mars 2007


Slash 21:14 - 13:e Mars 2007 | Post #4
Medlem
Inlägg: 141


Skicka PM
Du kan använda ungefär samma metod som du använt nu.
Det vill säga du definerar en array för att hålla reda på räkningen för varje tecken.

Så något lite halv-psuedo så kan det se ut någonting såhär:

  1. int antal[100] = {}; // Intierar alla element till 0
  2. char c1;
  3. char c2;
  4. if (infil.get(c2))
  5. {
  6. while (true)
  7. {
  8. c1 = c2;
  9. if (infil.get(c2))
  10. {
  11. antal[(c1 - '0')*10 + (c2 - '0')]++;
  12. }
  13. else
  14. break;
  15. }
  16. }


Felhantering, filläsning och buggfixning överlämnas varmt till dig Smiley.

-------------------------
Ingen sigantur!

Senast redigerad 21:16 - 13:e Mars 2007


WiK 21:29 - 13:e Mars 2007 | Post #5
Medlem
Inlägg: 6


Skicka PM
Tack så mycket Smiley


Senast redigerad 21:30 - 13:e Mars 2007


WiK 21:35 - 13:e Mars 2007 | Post #6
Medlem
Inlägg: 6


Skicka PM



i


Senast redigerad 09:05 - 14:e Mars 2007


Slash 22:34 - 13:e Mars 2007 | Post #7
Medlem
Inlägg: 141


Skicka PM
Ja, den största skillnaden mot din förra program är ju att man måste ha två tecken för att beräkna vilken siffra det är. Så först läses ett tecken till c2 in, som sedan flyttas till c1. Efter det läses ett nytt tecken till c2 in. Då har du två tecken. Det ena tecknet (det i c2) måste du ha även till nästa gång, så då flyttar du det till c1 innan du läser in ett nytt till c2, och så vidare.

Så för strängen "1234" så blir det första varvet
c1 = '1' och c2 = '2'. Nästa varv flyttas c2 till c1 och ett nytt tecken läses in till c2. Alltså:
c1 = '2' och c2 = '3'. För varje varv beräknas också ett index genom att beräkna (c1-'0')*10 + c2-'0' som är lika med just 23 för c1 = '2' och c2 = '3'. Det som måste kollas innan detta görs är att c1 och c2 inte innehåller något annat tecken än en siffra (inte med i exemplet).

PS. '0' är bara en teckenkonstant för talet 48 som du använder.

EDIT
Skrev en lite elegantare Smiley

  1. char c1;
  2. char c2;
  3.  
  4. if (infil.get(c1))
  5. {
  6. while (infil.get(c2))
  7. {
  8. antal[(c1-'0')*10 + (c2-'0')]++;
  9. c1 = c2;
  10. }
  11. }


-------------------------
Ingen sigantur!

Senast redigerad 22:50 - 13:e Mars 2007


WiK 23:31 - 13:e Mars 2007 | Post #8
Medlem
Inlägg: 6


Skicka PM



nvm


Senast redigerad 09:04 - 14:e Mars 2007


Slash 23:45 - 13:e Mars 2007 | Post #9
Medlem
Inlägg: 141


Skicka PM
Du skulle alltså fortfarande räkna 0-9 också? Isåfall måste du öka något i stil med antal[c-48]++ också någonstans. Du får se till att det blir rätt i slutet på filen (om filen innehåller ojämnt antal tecken). Räkningen av två siffror verkar fungera.

-------------------------
Ingen sigantur!



WiK 23:47 - 13:e Mars 2007 | Post #10
Medlem
Inlägg: 6


Skicka PM
Tackar nu fungerar allt finfint




Sidor: 1

Forum huvudsida -> Programmering -> [C++] Kodningsproblem
Atom feed

Du får inte posta i den här tråden | Till toppen