kaczka Opublikowano 16 Czerwca 2005 Zgłoś Opublikowano 16 Czerwca 2005 (edytowane) hey, mam problem. Jestem totalnym noobem w programowaniu i nie wiem jak skopiować łańcuch znaków ( wpisywany z klawiatury ) do tablicy znaków O_o i jaką funkcją można określić długość łańcucha? Używam iostream'a. Potrzebuje pomocy HELP Edytowane 16 Czerwca 2005 przez kaczka Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Artur.M Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 o rany ale to są podstawy. Aby skopiowac do jakiejś zmiennej coś z klawatury użyć możesz cin>>zmienna; jeżeli zmienna będzie typu int to po wpisaniu liczby znajdzie się tam ona. Jeżeli zmiennna była by typu np. char * to wtedy zapisze się do zmiennej wpiany tekst. Pamiętaj że zapisze się to tylko do pierwszej spacji. Jeżeli chcesz zapisywać jakiś dłuższy tekst to możesz użyć cin.getline(zmienna,100); gdzie 100 to liczba zapisywanych znaków do zmiennej. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 1. To rzeczywiście są podstawy. Jak Ty się uczysz tego programowania? Na wyczucie?? 2. Ściagnij sobie kilka kursów/książek z netu i przestań zadawać takie pytania. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaczka Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 o rany ale to są podstawy. Aby skopiowac do jakiejś zmiennej coś z klawatury użyć możesz cin>>zmienna; jeżeli zmienna będzie typu int to po wpisaniu liczby znajdzie się tam ona. Jeżeli zmiennna była by typu np. char * to wtedy zapisze się do zmiennej wpiany tekst. Pamiętaj że zapisze się to tylko do pierwszej spacji. Jeżeli chcesz zapisywać jakiś dłuższy tekst to możesz użyć cin.getline(zmienna,100); gdzie 100 to liczba zapisywanych znaków do zmiennej. 1500441[/snapback] totalny noob chyba mówi samo za siebie, że ucze sie dopiero. cin >> zmienna nie łapie mi tego łańcucha, jak chce go później wypisać to mi chinskim odpisuje, a za cin.getline bardzo dziękuje :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Artur.M Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 Jak ci cin>>zmienna; nie działa :| sprubuj taki kod wstawić char *tekst; cin>>tekst; cout<<tekset; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaczka Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 1234567890 <-- to wpisywałem +â|$¦Ów" t$¦Ŕ ůLYu-9Dt> t$¦Ŕ.Ţ ůLYuŮ3L+ 5¦L¦w tŔ+ YY+j$h` LwŔ`Ę <-- a to mi pokazywało, że wpisywałem cin.getline pomogło odrazu btw. używam DevC++ Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ojejku Opublikowano 17 Czerwca 2005 Zgłoś Opublikowano 17 Czerwca 2005 Jak ci cin>>zmienna; nie działa :| sprubuj taki kod wstawić char *tekst; cin>>tekst; cout<<tekset; 1500863[/snapback] jeden noob pomaga drugiemu. LOL. Jak chcesz cokolwiek wprowadzić do zmiennej *tekst ? jak jest ona wskaźnikiem na zmienną typu CHAR. Jak nie zaalokujesz do niej pamięci to strzelasz w PAMIĘĆ, co może się katastrofalnie skończyć. Dlatego Ci krzaki wywalało przy odczycie. Pomyślcie następnym razem zanim odpiszecie, a nie mówicie kaczce, że to podstawy a sami tych podstaw nie znacie. pozdro. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jpr Opublikowano 18 Czerwca 2005 Zgłoś Opublikowano 18 Czerwca 2005 (edytowane) a moze tak? #include <iostream> #include <string> using namespace std; main() { string text; cout << "wpisz jakis tekst: "; cin >> text; cout << "wynik: " << text << endl; return 0; } poprawnie? :) a jesli juz koniecznie upierasz sie przy tych wskaznikach to moze tak? #include <iostream> using namespace std; main() { char text[100]; char *wsk; cout << "wpisz jakis tekst: "; gets(text); wsk = new char[strlen(text)+1]; strcpy(wsk, text); cout << "wynik: " << wsk << endl; return 0; } w drugim przypadku mozesz pisac rowniez spacje Edytowane 18 Czerwca 2005 przez jpr Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaczka Opublikowano 19 Czerwca 2005 Zgłoś Opublikowano 19 Czerwca 2005 (edytowane) Wielkie dzięki jpr, świetna odpowiedź :) Przy okazji poznałem nową funkcje - gets(text) :D EDIT: Ok natrafiłem na kolejny problem pisząc swój program. Napisalem funkcje porównującą element 1 tablicy z elementami 2 tablicy i mam wyróżnione 3 możliwości: if(warunek1) ble return(cos1); if(warunek2) bla return(cos2); if(warunek3) asdf return(cos3); Fukcja ta jest wywolywana w pętli. Zależy mi na tym by za każdym razem, kiedy któryś z tych przypadków zdaży się pętla była przerywana. Nie wiem czy tak sie da O_o? Jesli nie, a macie jakieś pomysły to możecie coś mi podrzucić :) Edytowane 19 Czerwca 2005 przez kaczka Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ULLISSES Opublikowano 19 Czerwca 2005 Zgłoś Opublikowano 19 Czerwca 2005 if(warunek){blareturn cos2break; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaczka Opublikowano 19 Czerwca 2005 Zgłoś Opublikowano 19 Czerwca 2005 (edytowane) próbowałem to, ale kompilator krzyczy: 86 F:\Dev-Cpp\projekty\szyfr przesuwajacy\szyfr_przesuwajacy_1.cpp break statement not within loop or switch :S EDIT: Ok, opisze dokładniej jak wygląda mój program i jak zamierzam, aby ten program działał. Najistotniejsze dla mnie w programie jest to, aby wprowadzony tekst analizować znak po znaku z pewnym wzorcem i w związku z zaistniałym porównaniem zrobić jedną z 3 operacji na tym łańcuchu. Zrobiłem jedną pętle, która przechodzi przez cały tekst, w niej jest 2 pętla, w której wywoływana jest funkcja, która analizuje tekst w oparciu o wzorzec ( ta funkcja z 3 if'ami ). for(x = 0; x <= strlen(tekst); x++) { for(y = 0; y <= 25; y++) { asdf[x] = porownaj(a, e, w, d); } } /- porownaj -/ if(warunek1) { ble return cos1; } if(warunek2) { bla return cos2; } if(warunek3) { asdf return cos3; } /---/ Więc przy takiej konstrukcji jest pewien problem, bo nawet jak fukcja znajdzie wzorzec i coś zrobi z tym tekstem, to przejdzie do kolejnego wykonania pętli. Jeden z warunków odnosi się do sytuacji, kiedy wzorzec nie jest odnaleziony i w łańcuchu w to miejsce wrzuca znak "specjalny". Więc najpierw będzie porównywał element łańcucha z 1 elementem wzorca, i jeśli on nie będzie on taki sam to wrzucony zostanie znak specjalny. Następny krok w petli i tak, aż dojdziemy do porównania gdzie znak łańcucha będzie równał się znakowi wzorca i wtedy zostanie wpisany w to miejsce nowy wygenerowany na podstawie pewnego algorytmu znak ( tutaj powinno być przejście do kolejnego elementu w łańcuchu ). Następnie w kolejnym wykonaniu ta pozycja zostanie zapisana znakiem specjalnym, po znak nie będzie odpowiadał żadnemu wzorcowi. Mam nadzieje, że zrozumieliście o co mi chodzi :) Edytowane 19 Czerwca 2005 przez kaczka Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kobe2005 Opublikowano 19 Czerwca 2005 Zgłoś Opublikowano 19 Czerwca 2005 /*********** if(warunek) { bla return cos2 break; *************/ cos takiego nie zabardzo ma sens. Jesli używasz return wnoskuje ze ta petla wraz z warunkami jest w osobnej funkcji. Muisz wiedziec ze jesli dasz return (cos) to odrazu "opuszczamy funkcje" tak wiec break jest niepotrzebny. if(warunek1) return wart1; if(warunek2) return wart2 else return wart3; Tutaj zalozylem ze jesli nie spelnia pierwszego i drugiego warunku to musi spelnic ten trzeci. jesli tak nie jest to poprostu zamast else zastoduj if.. Tak na przyszłość poczytaj o instrukcji switch() przyda sie jesli bedziesz mial kilka warunkow do rozpatrzenia... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaczka Opublikowano 19 Czerwca 2005 Zgłoś Opublikowano 19 Czerwca 2005 Ok zrobiłem, wyszło mi. Wziołem w funkcje jedną pętle i zadziałąło. Nie wiem czemu wcześniej myślałem, że funkcja nie będzie działała poprawnie jak dam do niej jeszce tą pętle. Działą wszysto. Dzięki wszystkim za pomoc. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 22 Czerwca 2005 Zgłoś Opublikowano 22 Czerwca 2005 Wskaźniki które pokazuja w pamięci łańcuchy znakowe powinny być oznaczone lepiej jako const char * wskaznik = "napis" ; wtedy przez przypadek nic do takiego napisu juz nie "dodamy" :D :D :D W każdym nowoczesnym języku programowania także i w c++ jest taka fajna klasa string a włąściwie szablon i taki napis string który ma swoje bardzo ciekawe metody niesamowicie upraszcza wszysktie operacje na tekscie. string napis ; i wtedy takie cudo ma w możę kożystać z metod jakie są w tej klasie niektóre z nich : to napis.size() , napis.clear() , napis.length() , napis.resize(), i wiele , wiele innych. co prawda za takie wygody trzeba płacić nieco szybkością string jest wolnijszy niż tablice i napisy wskaźnikowe ale w c++ i tak jest to realizowane najszybciej!! Stosuj stringi no chyba że jesteś maniakiem wydajności , albo piszesz program który ma działać jak najszybiciej tylko sie da. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...