Stringteilung in C

#2387432
Lesenswert?

Hallo, ich hab ein kleines Problem.
Im folgendem Programmstueckchen sollen Strings (als str_in bezeichnet) 
nach einem Leerezeichen durchsucht werden und an der Stelle von diesem 
in str_1 und str_2 geteilt werden.
Das Problem ist, ich weiss nicht wie ich die Abbruchbedinung formulieren 
soll, falls in dem str_in kein Leerzeichen vorhanden ist.
Hier ist der Code:
1
char str_in[10];
2
char str_1 [10];
3
char str_2  [10];
4

5

6
void subset()
7
{  
8
  char index_in, index_out;
9
  
10
  index_in = 0;
11
  index_out = 0;
12
  
13
  while (str_in[index_in] != 0x20 && str_in[index_in]==0)
14
  {
15
    str_1[index_out] = str_in[index_in];
16
    index_in++;
17
    index_out++;
18
  }
19
  
20
  index_out = 0;
21
  
22
  while (str_in[index_in] != 0x0A && str_in[index_in] != 0x0D)
23
  {
24
    str_2[index_out] = str_in[index_in];
25
    index_in++;
26
    index_out++;
27
     }
28
   
29
}
Persönliche Seite #2387532
Lesenswert?

mjam, Spielchen :-)

mal eben schnell runtercodiert, sollte funktionieren:
1
#define TOKEN     ' '
2
#define MAX_STR    16
3

4
int Tokenizer(char *str, char **dest, char token)
5
{
6
  unsigned int cnt=0, i=0;
7

8
  if(!str || !dest) return(-1);
9

10
  do {
11
    i++;
12
    if(*str == token) {
13
      dest[cnt] = (char *) malloc ((i * sizeof(char)) +1);
14
      memcpy(dest[cnt], str-(i-1), (i-1));
15
      dest[cnt++][(i-1)] = 0;
16
      if(cnt > (MAX_STR-1)) return(-1);
17
      i=0;
18
    }
19
  } while(*str++);
20

21
  if(cnt > (MAX_STR-1)) return(-1);
22
  dest[cnt] = (char *) malloc ((i * sizeof(char)) +1);
23
  memcpy(dest[cnt], str-i, i);
24
  dest[cnt++][i] = 0;
25

26
  return(cnt);
27
}
28

29

30
int main()
31
{
32
  char *str = "Hallo, Welt. Dies ist ein Test zum Tokenizer.";
33
  char *dest[MAX_STR];
34
  int strs;
35
  
36
  strs = Tokenizer(str, dest, TOKEN);
37
}

Viel Spass damit!
#2387552
Lesenswert?

Random ... schrieb:
> mal eben schnell runtercodiert, sollte funktionieren

Tut es :-)
Eine Ausgabe mit
1
  printf("str = %s\n", str);
2
  
3
  for(i=0; i<strs; i++)
4
  printf("dest[%d] = %s\n", i, dest[i]);

ergibt:

str = Hallo, Welt. Dies ist ein Test zum Tokenizer.
dest[0] = Hallo,
dest[1] = Welt.
dest[2] = Dies
dest[3] = ist
dest[4] = ein
dest[5] = Test
dest[6] = zum
dest[7] = Tokenizer.
Gast #2424489
Lesenswert?

versuchs mal damit:
1
/* ------------------------------------------------------------------------- *
2
 * Splits up string into tokens                                              *
3
 * ------------------------------------------------------------------------- */
4
static __inline__ void strtokenize(char *p, int *argc, char *argv[]) {
5

6
  for(*argc = 0;;) {
7

8
    /* skip all spaces and tabstops */
9
    while(*p == ' ' || *p == '\t')
10
      *p++ = '\0'; /* set them to zero */
11

12
    /* if string terminator occurs, we got no more tokens */
13
    if(*p == '\0') break;
14

15
    if(*p == ':') {
16
      /* the rest is a single argument
17
         can include blanks also */
18
      argv[(*argc)++] = p + 1;
19
      break;
20
    } else {
21
      /* add to argv list */
22
      argv[(*argc)++] = p;
23

24
      /* we reached maximal size of argv array */
25
      if(*argc == MAXARGS) break;
26

27
      /* scan for end of string, either ' ' or '\0' */
28
      while(*p != ' ' && *p != '\0')
29
        p++;
30
    }
31
  }
32

33
  /* null terminate argv list */
34
  argv[*argc] = NULL;
35
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren