2017-12-17 1 views
1

Ich muss ein Programm schreiben, wo der Benutzer 3 Elemente und ihre relativen Preise eingibt, auf drei getrennten Strings. Dann muss ich prüfen, ob der letzte Artikel und der letzte Preis identisch sind mit einem der beiden anderen. Wenn das der Fall ist, muss ich den Artikel und den Gesamtpreis drucken (der Preis dieses Artikels multipliziert mit 2).Wie teilt man die Saite in zwei Teile?

Das Problem ist, dass scheinbar, wenn ich eine Funktion, um den Namen des Elements aus dem Preis zu teilen aufrufen (ich würde sie idealerweise als zwei separate Zeichenfolgen speichern und dann die Float-Zeichenfolge des Preises in eine normale Float-Variable konvertieren) , aber es funktioniert nicht.

Dies ist die Funktion

void f(char v[], char product[], char price[]){ 

int i=0, a=0, inword=0, z=0; 

while (!z) { 
    if(isalpha(v[i])&&inword) 
     product[i]=v[i]; 
    if (isalpha(v[i])&&!inword) { 
     inword++; 
     product[i]=v[i]; 
    } 
    if (isspace(v[i])&&inword) { 
     inword=0; 
     a=1; 
    } 
    if ((isdigit(v[i])||v[i]=='.')&&a) { 
     price[i]=v[i]; 
    } 
    if (a&&v[i]=='\n') 
     z=1; 
    i++; 
} 
puts(product); 
puts(price); 

}

ich sicher, dass es richtig in den Haupt- und vor dem Haupt definiert ist. Die Eingabe-Zeichenfolge sollte in etwa so aussehen: Apple 4.99\n Daher suche ich zuerst nach einem Buchstaben, wenn ich einen finde, fange ich an, das Wort im String-Produkt zu speichern, dann sobald ich einen Platz finde, gehe ich aus "inword" und ich suche nach einer Ziffer (der Preis hat nicht € oder $).

Im Idealfall wäre das Ergebnis der beiden Strings:

product = Apple Preis = 4.99

Aber wenn ich versuche, den Preis ist es leer zu drucken ... Können Sie mir helfen?

Die Nebenfrage ist, wie suche ich nach £ $ € in der Zeichenfolge? Wenn ich schreiben ‚€‘ es ist mir ein Fehler Zeichen ... Vielen Dank für Ihre Hilfe

+0

-Code verwendet '-Produkt mit tun könnte,' wie _stirngs_ price', noch tut füge kein Null-Zeichen an. – chux

+0

Forschung 'strtok()'. Etwas wie 'strcpy (product, strtok (ch, \ n")); strcpy (Preis, strtok (NULL, "\ n")); 'sollte funktionieren. – chux

Antwort

1

Sie mögen dieses

void f(char v[], char product[], char price[]){ 
    char * p = v; 
    while (!isdigit(p[0])) 
     p++; 

    memcpy(product, v, p-v); 
    product[p-v]='\0'; 
    strcpy(price, p); 
} 
+0

Danke ... Das hat funktioniert und war eine elegantere Lösung! Ich wusste nicht, dass es solche Befehle gab! – Paglie98

Verwandte Themen