Jak policzyć liczbę elementów tablicy do konkretnego znaku? Instrukcja:
(tablica[i]!='*') liczba++;
nie działa, co mnie trochę dziwi, bo podobna instrukcja wyszukiwania znaku:
(tablica[i]=='*')
działa w pętli bez zarzutu.
Jak policzyć liczbę elementów tablicy do konkretnego znaku? Instrukcja:
(tablica[i]!='*') liczba++;
nie działa, co mnie trochę dziwi, bo podobna instrukcja wyszukiwania znaku:
(tablica[i]=='*')
działa w pętli bez zarzutu.
Kryształowa kula podpowiada: - masz błąd w 13-tym wierszu.
Po prostu brakuje while
przed (tablica[i]!='*') liczba++;
;)
Druga sprawa, przypisujesz zmiennej liczba
wartość 0, zanim rozpoczniesz sumowanie?
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str = "www.secure**swords.com";
char sign = '*';
cout << count(str.begin(), str.end(), sign);
return 0;
}
out:
2
//EDIT:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
string str = "www.secure**swords.com";
char sign = '*';
cout << find(str.begin(), str.end(), sign) - str.begin();
return 0;
}
out:
10
Wybaczcie myślałem, że błąd jest w instrukcji, dlatego tak skromnie napisałem. Ogółem kombinowałem z 3 pętlami i jest źle
int main(int argc, char *argv[]) {
char napis[]={"asd jusy dsfg"};
int i,liczba=0;
/* for(i=0;napis[i]!='\0';i++) //wyswietla 11
{
if(napis[i]!='d')
liczba++;
}
while(napis[i]!='d') //program wisi
liczba++; //nie zwraca zadnych wynikow
*/
do //program wisi
liczba++; //nie zwraca zadnych wynikow
while(napis[i]!='d');
printf("%d",liczba);
return 0;
}
Np z while wystarczy tak:
while(napis[i] != 'd') { i++; }
printf("%d", i);
Wiem że można obejść się bez dodatkowej zmiennej, problem w tym że program nie zwraca prawidłowego wyniku
Tak jak napisał kolega powyżej - spróbuj z przypisaniem pod 'i' liczby '0' przed pętlą.
Nie zwiększasz i nie inicjalizujesz zmiennej i
.
W wyniku czego zwiększasz zmienną liczba
dopóki "losowa" komórka pamięci nie przyjmie wartości d
.
Wielkie dzięki, zaczynam rozkminiać dlaczego nie działało, chociaż przyznam że mam mętlik w głowie, bo przy wyszukiwaniu konkretnego znaku za pomocą instrukcji (tablica[i]=='*') działa z dodatkową zmienną, tak jak to wyżej zaprezentowałem.
Tak jak napisałem wyżej warunek (tablica[i]=='*') działa bezproblemowo. Skąd wynika taka różnica w działaniu?
int main(int argc, char *argv[]) {
char napis[]={"asd jusy dsfg"};
int i,liczba=0;
for(i=0;napis[i]!='\0';i++)
{
if(napis[i]=='d') //(napis[i]!='d') nie dziala
liczba++;
}
printf("%d",liczba);
return 0;
}
Błąd polega na tym, że zliczasz wystąpienia wszystkich liter z wyjątkiem d
, a masz zliczać nie wszystkie, a tylko te przed d. Więc if (napis == 'd') break; ++counter;
.
const char tablica[] = "ala ma kota * psa";
int liczba = strchr(tablica, '*') - tablica;