Zahl oder nicht Zahl!!!
-
Und da nehmen wir doch bitte isdigit() oder wenn es unbedingt ein händischer Vergleich sein soll -> '0' und '9' statt 48 und 57. Dann ist es wenigstens noch lesbarer und portabel.
Aber ingesamt wäre mir das zuviel Stress. Ich würde fertige Funktionen wie strtod() und strtol() verwenden. Das Rad neu zu erfinden ist so schrecklich unproduktiv.
edit: isdigit() mit isalpha() verdreht.
-
@TactX: Der Grund dieses Beispiels dient einmal die Grundkenntnisse von
C zu üben. Und darum möchte ich keine anderen Funktionen z.B: strrod(),...
verwenden. Aber trotzdem Danke!Mein Code:
#include<stdio.h> void main(void) { char string[30]; char *p_cPointer; char a; int index=0; int indexp=0; int indexn=0; char *p_cP2; printf("Eingabe:"); scanf("%s",string);/*String einlesen*/ for(p_cPointer=string;*p_cPointer!='\0';p_cPointer++) /*Inhalte des String bis zum Ende auslesen*/ { a=*p_cPointer; if(a>='0' &&a<='9') /*Prüfen ob es eine Zahl ist*/ { index = index+1; /*Counter für die Anzahl der Zahlen*/ p_cP2=p_cPointer-1; if(*p_cP2=='-') /*Prüfen ob das Zeichen vorher ein Minus ist, wenn ja->negativ, wenn nein->positv*/ { indexn=indexn+1; /*Counter für die Anzahl der Negativen Zahlen*/ } else { indexp=indexp+1; /*Counter für die Anzahl der Positven Zahlen*/ } } } printf("Es befinden sich %d Zahlen im String\n",index); printf("Anzahl der positiven: %d\n",indexp); printf("Anzahl der negative: %d\n",indexn); }
Danke!!!!!
-
@all
Hätte da noch eine "kleine
" Frage:
Ich habe mehrere Variablen oder ein Array in diesem die Variblen
gespeichert sind.Wie vergleiche ich die untereinander um sie dann
z.B von der kleinsten zu Größten Zahl zu ordnen
und sie dann wieder in die Variablen oder in das Array zu speichern?Sollte ja irgendwie mit einer Schleife gehen oder?
-
Dazu kannst du z.B. qsort() nehmen, Bubblesort und SelectionSort sind auch nicht so schwer, wenn du etwas selbst programmieren möchtest.
-
Normalerweise nimmt man dafür qsort(). Aber da du ja nicht so auf fertige Funktionen stehst, musst du das wohl selbst implementieren.
Der Bubblesort dürfte einer der einfachsten, aber auch langsamsten sein:
http://de.wikipedia.org/wiki/Bubblesortedit: zu langsam.
-
Ok, jetzt ist es kein Problem mehr!!
Werde es mal mit Bubblesort probieren.@all: Vielen Dank!!!
mfg
Mini
-
So, ich schon wieder
!
Und zwar hätte ich noch eine Frage zu q-sort.
Def:
#include <stdlib.h> void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
Es gebt um ein Array, welches mit Int-Werten gefüllt ist.
1.Parameter: Adresse des Arrays
2.Parameter: Die Anzahl der Int-Variablen in meinem Array
3.Parameter: Byte Anzahl eines Elementes meines Arrays-> Die Byte-Anzahl von Int
4.Parameter: ?????????????????????????????Was ist der 4.Parameter?
Danke!!!!
-
int compare(void *a, void *b) { return irgendwas; // -1, 0 oder 1, je nach dem, wie sich a zu b verhaelt } qsort(buf, buflen, sizeof(buf[0]), compare);
-
Ok, es funktioniert!
Aber was macht dies Funktion "compare! überhaupt
bzw. warum braucht man die überhaupt?
Ok, sie gibt entwender 1,0 oder -1 zurück!Bei meinem Bsp. werden die Arrays vom kleinsten Wert zum
größten geordnet.
Kann man mit dieser Funktion auch vom Größten zum Kleinsten ordnen?
Wenn ja wie?#include<stdio.h> #include<stdlib.h> // Bubble-Sort: Sortieren eines Arrays int compare( const void* a, const void* b ); void main(void) { int array1[5]={1,-2,0,3,5}; int array2[5]={1,-2,0,3,5}; int i,j,Zwischenwert; int size_array=5; /* Sortieren selbst programmiert for(i=0;i<size_array;i++) { for(j=i+1;j<size_array;j++) { if(array2[i]<array2[j]) { Zwischenwert=array2[j]; array2[j]=array2[i]; array2[i]=Zwischenwert; } } } */ /* mit qsort void qsort= qsort( array, array_size, sizeof(int), compare_ints );*/ qsort(array2, size_array, sizeof(int), compare); printf("\nVorher Nachher"); printf("\n %d %d\n",array1[0],array2[0]); printf("\n %d %d\n",array1[1],array2[1]); printf("\n %d %d\n",array1[2],array2[2]); printf("\n %d %d\n",array1[3],array2[3]); printf("\n %d %d\n",array1[4],array2[4]); } int compare( const void* a, const void* b ) { int* arg1 = (int*) a; int* arg2 = (int*) b; if( *arg1 < *arg2 ) return -1; else if( *arg1 == *arg2 ) return 0; else return 1; }
-
Mini1982 schrieb:
Aber was macht dies Funktion "compare! überhaupt
bzw. warum braucht man die überhaupt?Um qsort() mitzuteilen, welches der zu vergleichenden Werte größer/kleiner/gleich ist.
Mini1982 schrieb:
Ok, sie gibt entwender 1,0 oder -1 zurück!
Genauer: Sie gibt entweder 0, eine Zahl größer 0 oder eine Zahl kleiner 0 zurück.
Mini1982 schrieb:
Bei meinem Bsp. werden die Arrays vom kleinsten Wert zum
größten geordnet.
Kann man mit dieser Funktion auch vom Größten zum Kleinsten ordnen?
Wenn ja wie?Indem man die Vergleichsfunktion entsprechend abändert.
btw, deine Vergleichsfunktion kann man auch einfacher mit einer Subtraktion lösen.
-
Passt, ich hab es überissen
!
Hat zwar lang gedauert aber es funktioniert
!
@all: Thanks
mfg
Mini