mit hilfe einer fkt nach einem ! in einem string suchen
-
hallo, bräuchte mal hilfe.
also das program soll mit hilfe einer fkt. in einem im main programm eingegebenen text nach einen '!' suchen und mir die positions nummer ausgeben.using namespace std;
char fkt(char *);
int main ()
{
char d[1000];
int i;
cout<<"bitte geben sie ein text ein in dem nach ! gesucht werden soll "<<endl;for(i=0;i<1000;i++)
{
cin>>d[i];if(d[i]=='.')
{
break;
}}
cout<<fkt(&d[i])<<endl;
}char fkt(char *x)
{
int i;
char z=1;for (i=0;i<1000;i++)
{
*x++;
z++;
if(*x=='a')
{
return z;
}else
{
z=-1;
return z;
}
}
}
-
hatte vergessen in der if bedingung das 'a' in ein '!' zu ändern. bekomme aber trozdem kein ergebnis.....
-
1. ist das C++ --> falsches Forum.
2. Bitte C/C++ Tags benutzen. Das liest so kein Mensch!
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum C++ (auch C++0x, bzw. C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Nutze, was die Standardbibliothek dir gegeben! Lobet und preiset sie! :xmas1:
#include<iostream> #include<string> using namespace std; int main() { string eingabe; cin >> eingabe; cout << eingabe.find('!'); }
-
Du verwendest keine Code-Tags,
Du bist im falschen Forum,
Du hast den "Wie erstelle ich einen Thread?"-Thread nicht gelesen,
Du bist weit entfernt von der korrekten Verwendung der Deutschen Grammatik,
Du bist umso näher am Abgrund des Schlundes der Verderbnis sinnfreier Codeschnipsel,
...Wenn Du die Eingabe in main() bei '.' beendest und in fkt (Freiherr Karl-Theodor?) munter bis 1000 zählst, durchsuchst Du im Zweifel ganz prima Speicherbereiche, die Dich gegebenenfalls einen Feuchten angehen.
Während Du also munter i hochzählst, zählt z noch nebenher und den Pointer x schiebst Du wie Ray Charles auf einem wildgewordenen Schneemobil durch die Fußgängerzone...
Glücklicherweise habe ich mit C++ nichts am Hut, aber in halbwegs standardkonformem C brächte mich dieser Code schnurstracks zum Erbrechen.Wenn man in C übrigens einen Char mit einem unpraktischen Wert (z.B. < 48 oder > 57) ausgibt, hat man eine ziemlich schlechte Chance, eine lesbare Zahl zu sehen zu bekommen. Wie das in C++ ist, will ich gar nicht wissen.
using namespace std; char fkt(char *); int main () { char d[1000]; int i; cout<<"bitte geben sie ein text ein in dem nach ! gesucht werden soll "<<endl; for(i=0;i<1000;i++) { cin>>d[i]; if(d[i]=='.') { break; } } cout<<fkt(&d[i])<<endl; } char fkt(char *x) { int i; char z=1; for (i=0;i<1000;i++) { *x++; z++; if(*x=='a') { return z; } else { z=-1; return z; } } }
-
hey super vielen dank!
aber ich muss diese aufgabe mit hilfe einer fkt lösen bzw einen zeiger lösen.
habe es aber geschaft...int fkt(char *);
int main ()
{
string s;cout<<"bitte geben sie ein text ein in dem nach ! gesucht werden soll "<<endl;
cin>>s;
cout<<fkt(&s[0])<<endl;
}int fkt(char *x)
{
int i=1;
int z=-1;while(*x)
{
if(*x=='!')
{
z=i;
}
*x++;
i++;}
return z;
}
-
Du hast Dich nichtmal bemüht, hier die Antworten zu lesen, richtig?
-
Doch auf jeden fall SeppJ hat mich auf den richtigen pfad gebracht mit dem string zu arbeiten anstatt jeden buchstaben in ein datefeld zu speichern was im nachhinein betrachtet auch zu viel arbeit gewesen ist!
Vielen dank nochmal an SeppJ.
-
Ich halte evtl diese Lösung für sinnvoller:
#include <iostream> int fkt(char const * str) { char const * p = str; // Nach '!' suchen oder gegebenenfalls bei '\0' abbrechen while (*p != '!' && *p) ++p; // '!' nicht gefunden if (!(*p)) return -1; // Etwas Zeiger-Arithmetik return static_cast<int>(p - str); } int main() { using std::cin; using std::cout; using std::endl; // string s; // cin >> s; <- Das tut nicht unbedingt das, was du vllt erwartest... // Der obige Code kehrt nach dem ersten Whitespace zurück. // Halte ich in dieser Fassung für besser, da du ohnehin mit rohen Zeigern arbeiten sollst char buffer[1024]; cin.getline(buffer, 1024); // Alternativ zu char[] und cin.getline wäre dieser Ansatz denkbar: // std::string s; // std::getline(std::cin, s); cout << fkt(buffer) << endl; return 0; }
-
volume123 schrieb:
Doch auf jeden fall
Nein, nicht jede. Sonst hättest du Code-Tags benutzt.