Liczenie elementów tablicy

0

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.

0

Kryształowa kula podpowiada: - masz błąd w 13-tym wierszu.

0

Po prostu brakuje while przed (tablica[i]!='*') liczba++; ;)
Druga sprawa, przypisujesz zmiennej liczba wartość 0, zanim rozpoczniesz sumowanie?

0
#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

0

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;
}
1

Np z while wystarczy tak:

while(napis[i] != 'd') { i++; }
printf("%d", i);
0

Wiem że można obejść się bez dodatkowej zmiennej, problem w tym że program nie zwraca prawidłowego wyniku

0

Tak jak napisał kolega powyżej - spróbuj z przypisaniem pod 'i' liczby '0' przed pętlą.

1

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.

0

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.

0

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;
} 
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;.

1
const char tablica[] = "ala ma kota * psa";
int liczba = strchr(tablica, '*') - tablica;

1 użytkowników online, w tym zalogowanych: 0, gości: 1