Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkkijonon poimiminen stringistä

Antex [05.05.2006 08:48:18]

#

Tarkoituksena on saada stringistä "1 3 5 7-10" poimittua numerot 1,3,5,7,8,9,10

mikä tähän olisi paras keino?

kokeilin strncpy funktiota mutta se ei löydä viimeistä numeroa ellei sen perässä ole ylimääräistä erotinta.

Heikki [05.05.2006 09:54:18]

#

Ainakin C:n sscanf() varmaan hoitaisi homman.

Metabolix [05.05.2006 10:09:35]

#

Vaan kuinka toimitaankaan, jos numeroiden määrää ei tiedetä?

Yritä ymmärtää tästä jotakin. Funktioiden dokumentaatioihin kannattaa tutustua, niin tietää, kuinka ne toimivat.

#include <stdio.h>

int main(void)
{
  int a, b, i, j, Taulu[100];
  char c[100], *ptr;

  // Luetaan teksti (enintään 100 merkkiä)
  fgets(c, 100, stdin);
  c[99] = 0;

  // Pointteri tekstin alkuun ja taulukon lukujen määräksi nolla
  ptr = c;
  j = 0;

  // Niin kauan kuin pointteri ei osoita nollamerkkiin
  while (*ptr != 0)
  {
    // Luetaan luvut muodossa 1-2, i = montako luettiin
    i = sscanf(ptr, "%i-%i", &a, &b);

    // Yksi vai kaksi lukua?
    if (i == 1) {
      // Luku tauluun
      Taulu[j] = a;
      ++j;
    }
    else if (i == 2) {
      // Pienempi luettu a:han
      if (b < a) {
        i = a;
        a = b;
        b = i;
      }
      // Luvut a-b taulukkoon
      for (i = a; i <= b; ++i) {
        Taulu[j] = i;
        ++j;
      }
    }

    // Siirrytään seuraavaan merkkiin ja etsitään seuraava väli tai tekstin loppu
    ++ptr;
    while (*ptr != 0 && *ptr != ' ')
      ++ptr;
  }

  // Käydään taulu läpi ja tulostetaan
  for (i = 0; i < j; ++i) {
    printf("%i\n", Taulu[i]);
  }

  return 0;
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta