Tags:
c++
Hej
Jeg er så startet på et nyt program i C+, hvor jeg på et tidspunkt i programmet skal lave symboler (bogstaver, tal og mellemrum) om til tal som er fastsat.... F.eks:
" " = 00, "a" = 01, "B" = 02, "C" = 03 etc...
Men samtidig skal der sættes mellemrum imellem hver 4. tal, som vist her.
"hej du"= 0805 1000 0421
Og hvis antallet af symboler ikke passer med at det slutter i en blok af 4 så skal der sættes "00" bagefter.
Jeg ville bare høre om der er nogen som har en hurtig idé eller måske kender en vejledning...
På forhånd tak...
12 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
0
Kunne vel i teorien bare konvertere direkte fra ASCII til decimaltal, men ville det ikke betyde at de små bogstaver efter c ville give værdien 100+ ?
og da hvert tal højst må være 2 tal hjælper det ikke.....
Men ville de store bogstaver ikke gå fra 65 og til 90 ?
0
hehe hvorfor er det at idéerne altid kommer når man beder om hjælp....
Kan jeg ikke bare lave en dobbelt While lykke eller noget, hvor den indre lykke har en tæller der starter ved 0 og så hver gang den går igennem et symbol så lægger den 1 til den tæller, og når den så kommer op på 2 så går den ud af lykken og tilføjer et mellemrum, men så starter den anden lykke den om igen fordi EOF ikke er blevet nået ?
Eller er det en helt forkert retning til løsning af det der problem med mellemrum ?
0
Træk 64 fra og konverter til ascii A er 65
Du skal så håndtere mellemrun for sig selv, mellemrum er 32.
Du kan også trække 32 fra, så giver mellemrum 00, z er 122, 90 når du trækker 32 fra, så der er plads nok
0
Det er nok lettest at lave:
for(int i = 0; i < size; i += 2)
{
ConverterOgTilfoej(i);
if(i + 1 < whatever)
ConverterOgTilfoej(i);
else
Tilfoej("00");
}
0
altså nu er jeg rimelig ny til C+, så kan godt se hvor du vil hen med den kode, men hvad skal jeg gøre med ConverterOgTilfoej, whatever tilfoej ?
0
Du kan lave en funktion der konverterer et tegn og tilføjer til enden af dit output, denne funktion kunne hedde ConverterOgTilfoej.
Og du kan lave en funktion der bare tilføjer "00", den kunne bare hedde Tilfoej.
Hvad får du indput som og hvad skal output være?
Skal output være i hex?
0
Altså havde regnet med at input var en tekst jeg indtaster på den her måde:
char m;
scanf("%s", &m);
og så skal jeg på en eller anden måde konvertere teksten så det bliver til nogle decimaler jeg kan regne med hver for sig senere hen i programmet, det du skrev før virked meget fornuftigt med at trække 32 fra, for så har jeg stadig mellemrum og alle bogstaveren.
altså f.eks:
konverteringen:
"hej" = 7269 7400
Regning senere i programmet:
7269-100 7400-100 = 7169 7300
Ved ikke om det var nok info !
0
Det skal være:
char m[1024];
scanf("%s", m);
En char kan kun indeholde 1 tegn, %s læser en hel streng.
Hvorfor ikke bruge en std::string? Og læse med getline?
Skal output også skrives i en char array, eller kan en std::string bruges?
0
Nå okay, har ikke rigtig haft gang i getline så meget, så derfor jeg har holdt mig til scanf, selvom jeg læste noget om at scanf er upålidelig.
altså det skal bare være den letteste måde at håndtere det vidre hen, programmet skal bare laver en beregning med hver blok og så udskrive de værdier den får..helst i blokke igen.
0
F.ex:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
std::string ToString(unsigned int n)
{
std::stringstream SS;
SS << std::setw(2) << std::setfill('0') << n;
return SS.str();
}
int main()
{
std::string In;
std::cout << "Skriv noget: ";
std::getline(std::cin, In);
std::string Out;
for(std::string::size_type n = 0; n < In.size(); n++)
{
Out += ToString(In[n] - 32);
if((n + 1) % 2 == 0)
Out += " ";
}
if(In.size() & 1)
Out += "00";
std::cout << Out << std::endl;
}