Karl_o [ APOCALYPSE ]
Programowanie w C# ---> proste zadanie
Chcialbym napisac program, ktory liczy ile razy dany znak pojawil sie w podanej przez uzytkownika tablicy string. Tylko nie wiem jak sprawdzic rozmiar owej tablicy, zeby wyjsc z petli while. Z gory dzieki za odpowiedz. Pozdrawiam
Karl_o [ APOCALYPSE ]
^up
Regis [ ]
A w C# nie ma czasem metody sizeof() lub czegos podobnbego?
Moshimo [ FullMetal ]
Hm w sumie glowy nie dam, ale mysle ze to tak by moglo byc:
#include <iostream.h>
#include <conio.h>
main()
‹
char tab[3]="ab";
int i=0;
cout << sizeof(tab)/sizeof(char)-1 << endl; //sposob 1
while (tab[ i ]!='\0')i++; //sposob 2
cout << i << endl;
getch();
›
Tylko troche sam sie dziwie, ze nie przyjelo mi deklaracji tablicy tab[2], lecz dopiero tab[3].. To ma zwiazek ze znakiem konca tablicy? (myslalem ze on sie jakos automatycznie dodaje, tzn nie musimy go uwzgledniac przy podawaniu rozmiarow tablicy)
edit. aha i w tym przypadku sprawdzasz w zasadzie nie rozmiar tablicy, lecz jej dlugosc, ale przypuszczam ze o to Ci chodzilo. Do samego rozmiaru sluzy po prostu funkcja zapodana przez Regisa.
fanlegii79 [ Generaďż˝ ]
w c# to bedzie pewnie cos ala tablica.length().
Ale mozna to zrobic foreach-em
foreach (int i in intArray)
Console.WriteLine(i.ToString() );
Karl_o [ APOCALYPSE ]
moshimo dokladnie oto mi chodzilo, dzieki :)
Moshimo [ FullMetal ]
Aha spoko.. to dobrze ze Ci to zadzialalo, bo to pod c++ bylo :)
Karl_o [ APOCALYPSE ]
Kurcze znowu cos jest nie tak. Napisalem program ktory ma zliczac dany znak w tablicy, ale za cholere nie wiem czemu nie dziala, tzn za kazdym razem wychodzi 0 :(
#include <iostream>
#include <string>;
using namespace std;
string tab("zainicjalizowana tablica znakowa");
int licz()‹
char a;
int licznik=0;
int i=0;
cout<<"Podaj znak, ktory chcesz znalesc: ";
cin>>a;
while (tab[ i ]!='/0')‹
if (a==tab[ i ]) licznik=licznik+1;
i++;
return licznik;
›
›
int main()
‹
int wynik=licz();
cout<<"Podany znak znaleziono: "<<wynik<<" razy";
system("PAUSE");
›
Karl_o [ APOCALYPSE ]
^up
moze jednak ktos wie co jest nie tak?
Moshimo [ FullMetal ]
Jak na moje oko to blad jest tutaj:
while (tab[ i ]!='/0')‹
if (a==tab[ i ]) licznik=licznik+1;
i++;
return licznik;
›
Powinno byc:
while (tab[ i ]!='/0')‹
if (a==tab[ i ]) licznik=licznik+1;
i++;
›
return licznik;
Sprawdz i daj znac ;)
edit. slabo widac pogrubienie. Chodzi o ustawienie nawiasow
Karl_o [ APOCALYPSE ]
Teraz to juz wogole kompilator wywala mi blad przy linijce z petla while (WARNING comparison is alway true due to limited range of data type). Ehhh pochlastac sie idzie :/
P.S.
Nie przepraszam, juz skompilowany program wywala mi blad po podaniu znaku. Chodzi mniej wiecej w tym komunikacie, ze odwoluje sie do obszaru pamieci, ktory nie moze byc czytany
Karl_o [ APOCALYPSE ]
Sorry za 2 posta ale nie moge juz edytowac poprzedniego.
Juz wiem gdzie tkwil blad....ehhh powinno byc '\0' a nie '/0' :) Ale tak wielkie dzieki za pomoc moshimo
Moshimo [ FullMetal ]
Hehe pierwszy jestes, wlasnie tez do tego doszedlem :D. Zawsze jakies glupie bledy ;)
DarkStar [ magister inzynier ]
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main()
‹
string sString;
char cZnak;
cout << "Podaj string: ";
cin >> sString;
cout << "Podaj szukany znak: ";
cin >> cZnak;
int i = 0;
int iLicznik = 0;
while(sString[ i ])
‹
if(sString[ i ] == cZnak) iLicznik++;
i++;
›
cout << "Szukany znak wystapil " << iLicznik << " razy" << endl;
cout << "String ma dlugosc " << i;
getch();
›
powinno dzialac:)
Karl_o [ APOCALYPSE ]
jeszcze jak ktos moglby obejrzec to drugie zadanie.
Trzeba przepisac wartosci 3 tablic typu char do 4 tablicy. Niewiedziec czemu mi przepisuje tylko pierwsza a z reszeta nic sie nie dzieje:
#include <iostream>
using namespace std;
int main()
‹
char tab1[]="zainicjalizowana";
char tab2[]="tablica";
char tab3[]="znakowa";
int a,b,c,d,e,f;
int j=0;
a=(sizeof(tab1)/sizeof(char))+(sizeof(tab2)/sizeof(char))+(sizeof(tab3)/sizeof(char));
char scalone[a];
b=sizeof(tab1)/sizeof(char);
c=sizeof(tab2)/sizeof(char);
d=sizeof(tab3)/sizeof(char);
for(int i=0;i<=b;i++) ‹
scalone[j]=tab1[ i ];
j++;
›
for(int i=0;i<=c;i++)‹
scalone[j]=tab2[ i ];
++j;
›
for(int i=0;i<=d;i++)‹
scalone[j]=tab3[ i ];
++j;
›
cout<<scalone;
system("PAUSE");
›
Moshimo [ FullMetal ]
Zmien warunki w forach z i<=b na i<b-1 (odpowiednio do reszty, chociaz w ostatnim nie trzeba :)).
Karl_o [ APOCALYPSE ]
Mam jeszcze jedno pytanie, mianowicie jezeli jakas funcja zwraca mi na przyklad sume 2 tablic w postaci nowej tablicy , to jak pozniej ja wypisyac juz w funkcji main()?
Karl_o [ APOCALYPSE ]
^up
Moshimo [ FullMetal ]
Znaczy jak sume? Takie scalenie tak jak teraz zrobiles? No to przeciez wyswietla scalona tablice zwyczajnie cout'em?
Karl_o [ APOCALYPSE ]
Ale ze mnie glupek....chyba przez to, ze juz zmeczony jestem....juz wszystko dziala, wiem gdzie tkwil blad
P.S.
Moshimo moglbys mi pomoc rozwiazac jakos to zadanie?
Napisz program, który pobierze od użytkownika dane kilku osób (Imię, Nazwisko) i zapisze w tablicy (typu string) o pewnym rozmiarze zdefiniowanym jako stała. Po podaniu danych każdej osoby wypisz pełną listę osób i pytaj, czy wprowadzać dane następnej.
Wprowadzanie danych nowej osoby i wypisywanie listy osób zrealizuj w oddzielnej funkcji. Do numeracji kolejnej osoby wykorzystaj w funkcji zmienną statyczną.
Moshimo [ FullMetal ]
edit. heh juz niewazne ;)
Moshimo [ FullMetal ]
wybacz Karl_o juz sam musze sie wziac za swoj referat, jestem do tylu niezle :/