Avatar billede linuxchristian Nybegynder
16. oktober 2005 - 12:59 Der er 7 kommentarer

C++ Delimiter

Jeg står og skal bruge noget kode der kan læse noget input, analysere det, finde mellemrum (" "), og tager de tal der står i mellem mellemrummene og gemme dem i et int array.

Input: 5 6 7 2 5 3 7 8
Array[0]=5.
Array[1]=6
osv.
Avatar billede bertelbrander Praktikant
16. oktober 2005 - 14:01 #1
Måske noget i stil med:

#include <string.h>
#include <iostream>

int main()
{
  char Input[] = "5 6 7 2 5 3 7 8", *p;

  int Array[1024];
  int Index = 0;
  p = strtok(Input, " ");
  while(p)
  {
      Array[Index++] = strtol(p, 0, 10);
      p = strtok(0, " ");
  }
  for(int i = 0; i < Index; i++)
      std::cout << Array[i] << std::endl;
}
Avatar billede linuxchristian Nybegynder
16. oktober 2005 - 14:10 #2
hvad nu hvis brugeren skal skrive hele input'et ind først...kan jeg undgå at skulle konverter fra string til char til int osv?
Avatar billede linuxchristian Nybegynder
16. oktober 2005 - 14:48 #3
koden bliver nød til at have en cin så brugeren kan indtaste noget data.
Avatar billede bertelbrander Praktikant
16. oktober 2005 - 17:01 #4
Det smarteste er nok at læse en en char [] fra std::cin og køre loopen fra før.

Du kan også:
#include <iostream>
int main()
{
  int Array[1024];
  int Index = 0;

  while(std::cin >> Array[Index])
      Index++;
  for(int i = 0; i < Index; i++)
      std::cout << Array[i] << std::endl;
}

Så skal brugeren taste nogle tal, trykke enter OG Ctrl+Z (eller Ctrl+D på linux).
Problemet med den løsninge er at hvis noget går galt (f.ex. hvis han tror at Flagstang er et gyldigt tal), så går programmet i baglås.
Avatar billede amma Nybegynder
20. oktober 2005 - 19:57 #5
Hej

Du har inputtet i en std::string, ikke? Det burde du, ville jeg mene.

I så fald er svaret enkelt:

std::string inputStrengen;

inputStrengen.erase( std::remove( inputStrengen.begin(), inputStrengen.end() ), inputStrengen.end() );

:)
Avatar billede amma Nybegynder
20. oktober 2005 - 20:23 #6
liiidt for hurtig ...


inputStrengen.erase( std::remove( inputStrengen.begin(), inputStrengen.end(), ' ' ), inputStrengen.end() );
Avatar billede amma Nybegynder
27. oktober 2005 - 15:19 #7
Får man også point for svar? :)
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