Funktion geht nicht..
-
Hallo,
ich mal wieder
also erstmal folgender quellcode:
#include "stdafx.h" #include <stdio.h> #include <iostream> #include <stdlib.h> #include <string.h> #define Max_Zeichen 200 #define Min_Zeichen 20 using namespace std; bool bZeichen(char *cZeichenkette2); void main() { cout << "Mit diesem Programm koennen Sie eine Textdatei anlegen, \netwas hineinschreiben, und schliessen\n"; char cZeichenkette[Max_Zeichen], cZeichenkette2[Max_Zeichen], *cZeichenkette3; cZeichenkette3 = &cZeichenkette2[Max_Zeichen]; system("color 1E"); FILE * file = 0; //Texteingabe welche in .txt gespeichert werden soll cout<<"Geben sie den Text ein: "; fgets(cZeichenkette, Max_Zeichen, stdin); fflush(stdin); // Erstellen einer Textdatei "beispiel.txt" fopen_s(&file, "beispiel.txt", "w"); // Eingegebener text wird in die .txt geschrieben fprintf_s(file, cZeichenkette); // .txt wird geschlossen und gespeichert fclose(file); cout << "Das File wurde geschlossen und wird "; cout << "jetzt wieder geoeffnet und gelesen "; getchar(); // Wiederholtes öffnen der .txt fopen_s(&file, "beispiel.txt", "r"); // Übergeben des textes in den String fgets(cZeichenkette2, Max_Zeichen, file); cout << "Ihr Text: " << cZeichenkette2 << "\n"; fclose(file); int ilaenge = strlen(cZeichenkette2) - 1; int *pointer; pointer = &ilaenge; printf_s("%c", cZeichenkette2[2]); int j = 0; for (int i = 0; i < ilaenge; i++) { if((bZeichen(cZeichenkette2))!=0) ++j; } printf_s("%d", j); getchar(); } bool bZeichen(char *cZeichenkette2) { int i = 0; if (cZeichenkette2[i] == 32) { i++; return true; } else { i++; return false; } }
problematisch wird es erst unten, die Funktion macht nicht das was sie soll (nämlich zählen, wie viele leerzeichen im string vorkommen)
ich will zum schluss %ual ausgeben, wie viele Zeichen im string vorkommen..schonmal Danke im vorraus
-
Deine Funktion bZeichen kann auch keine Leerzeichen zählen, weil diese ja auch nicht durch den String geht sondern immer nur prüft ob das erste zeichen der Zeichenkette ein Leerzeichen ist. Nach dem die Funktion betreten wurde erstellst du als erstes eine Variable i welche mit 0 initialisiert wird und dann gleifst du mit cZeichenkette2[i] auf den String zu, was das gleiche ist wie cZeichenkette2[0] und Prüfst ob das gleich 32 wenn so ist erhöhst du i um 1 und beendest die Funktion.
Da die Funktion bZeichen heisst nehme ich an das du nur 1 Zeichen prüfen willst also würde die Funktion so aussehenprintf_s("%c", cZeichenkette2[2]); int j = 0; for (int i = 0; i < ilaenge; i++) { if((bZeichen(cZeichenkette2[i]))!=0) ++j; } printf_s("%d", j); getchar(); } bool bZeichen(char *cZeichenkette2) { if (*cZeichenkette2 == 32) return true; return false; }
So sollte es gehen wenn ich um diese Zeit das noch richtig zusammen bekomme, getestet hab ich das zumindest nicht
-
CTecS schrieb:
So sollte es gehen wenn ich um diese Zeit das noch richtig zusammen bekomme, getestet hab ich das zumindest nicht
Danke füt die mühe, aber ich möchte schon den kompletten strin auslesen lassen; aber wie gesagt, danke - bisher die netteste antwort die ich in dem forum bekommen habe
-
Das liesst doch den kompletten Sting aus, nur das eben der Zeichendurchlauf nicht in der Funktion gemacht wird. willst du das alles in der Funktion haben dann musst du halt nur alles was innerhalb der for-Schleife ist in die Funktion Packen und dann halt den Zeiger auf den String und die Länge des Strings übergeben. Wobei ich würde an deiner stelle nicht mit rohen char-Array rum mich abmühen sonden eine String-Klasse benutzen, dann wird das auch alles viel einfacher und sicherer.
-
CTecS schrieb:
Wobei ich würde an deiner stelle nicht mit rohen char-Array rum mich abmühen sonden eine String-Klasse benutzen, dann wird das auch alles viel einfacher und sicherer.
So schön es ist wenn auch mal Lob zurückkommt, so frustrierend ist es wenn Empfehlungen mehrfach gemacht werden und trotzdem ignoriert werden ....
"Da Du dich ja nun für C++ entschieden hast schreib auch richtigen
C++ Code und lass den ANSI-C Kram ganz weg. "
Ref:
https://www.c-plusplus.net/forum/330982-10Wobei ich einen Teil des vorhandenen Codes als Beispiel in C++ umkodiert hatte ...