Wie nach 10. Semikolon String einlesen

Gast #2021684
Lesenswert?

1
char *tmp = "1;2;3;4;5;6;7;8;9;10,asf,adf,asdfasdf,";
2
int i = 0;
3
while ( i < 10 ) {
4
   if ( *tmp == ';' ) 
5
      ++i;
6
   ++tmp;
7
}
8

9
printf("%s", tmp );

so in etwas, man sollte aber noch dafür sorgen das nichts schief geht 
wenn es keine 10 ; gibt.
#2021711
Lesenswert?

1
#include <iostream.h>
2

3
  /* g++ -Wno-deprecated -I/usr/include/c++/4.1.3/backward dlm.cpp -o dlm ; dlm ; rm dlm */
4

5
  void cut ( char const src [/*1 +cpc*/],   /* source      string */
6
             char       dst [/*1 +cpc*/],   /* destination " */
7
             char       dlm,                /* delimiter character */
8
             int        inx)                /* desired segment index */
9
  { int               s_i = 0,
10
                      d_i = 0;
11
    int               cnt = 0;
12
    while (('\0' != src [s_i]) && (inx > cnt)) {
13
      if (dlm == src [s_i])  ++ cnt;
14
      ++ s_i;
15
    }  /* while not at end of source string and more delimiters expected */
16
    while (('\0' != src [s_i]) && (dlm != src [s_i])) {
17
      dst [d_i] = src [s_i];  ++ d_i;
18
      ++ s_i;
19
    }  /* copy */
20
    dst [d_i] = '\0';  /* terminate */
21
    return;
22
  }  /* cut */
23

24
  #define CPC  31             /* capacity */
25
int main (int argc, char const *argv [])
26
{ char   const src [1 +CPC] = "0;1;2;3;4;5;6;7;8;9;10;11;";
27
  char         dst [1 +CPC] = "?";
28

29
  cut (src, dst, ';', 10);
30
  cout << "dst: \"" << dst << "\"." << endl;
31
  
32
  return 0;
33
}  /* main */
#2021727
Lesenswert?

Ich finde: die Aufgabenstellung ist so trivial, dass sie der 
Fragesteller alleine hinkriegen MUSS, wenn er sich auch nur in die Nähe 
des Begriffs "Programmierer" katapultieren will. Wenn er sich dann auch 
noch in die Nähe von "Softwareentwickler" schiessen will, dann muss er 
auch noch die richtige Idee dazu haben, zumal die nun wirklich nicht 
schwer zu finden ist.

Wie oft ein Zeichen in einem String vorkommt, ist Einsteigerniveau der 
6. oder 7. Unterrichtseinheit, gleich nachdem man erzählt bekommen hat, 
wie Strings in C funktionieren (aufbauend auf dem Begriff Array aus 2 
Stunden vorher).
#2021737
Lesenswert?

Peter schrieb:
> Xeraniad X. schrieb:
>> void cut ( char const src [/*1 +cpc*/]
>> src [s_i]
> das wird wohl schief gehen, weil man ja kein Zeiger übergibt, danach
> lieft man irgentetwas vom Stack aus.

Das ist schon in Ordnung.

Der Syntaktische Zucker

void foo( char a[] )
{
  ...
}

ist nichts anderes als der Versuch, den automatischen Pointer bei 
Array-Übergabe syntaktisch zu verstecken. Abgesehen davon passiert unter 
der Decke genau das gleiche wie bei

void foo( char * a )
{
  ...
}

Warum man diese Syntax in C erlaubt hat?
Keine Ahnung. Ausser das sich Neulinge etwas leichter tun, hat sie kaum 
Vorteile. Im Prototypen ist vielleicht etwas besser ersichtlich, dass 
die Funktion hier

void foo( char a[] );

ein bereits vorhandenes Array erwartet, während man bei

void foo( char * a );

nicht so recht weiß, wass es mit dem Pointer auf sich hat und sich erst 
mal schlau machen muss.
Gast #2021849
Lesenswert?

DEV0 schrieb:
> der code ist murx.

Welcher? Hier stehen zwei Codebeispiele. Außerdem ist das nun wirklich 
keine große Aufgabe. Da du kein C benötigst, sondern anscheinend nur 
irgendeine einen Murx der eine Art beschnittenes C ist, sollte es dir 
möglich sein den Code von Peter entsprechend anzupassen. Danach musst du 
dir dann nur noch Gedanken machen wie du auf nicht vorhandene Semikolons 
reagierst.

Schleife -> 10. Semikolon suchen -> Bis Terminierung kopieren... so 
schwer ist das nicht.

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