[C] char niz problem

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori
bajro17
Postovi: 91
Pridružen/a: 08 lip 2011, 15:47
Spol: M
OS: Linux Backtrack 5 KDE
Lokacija: BIH, Tomislavgrad

[C] char niz problem

Post Postao/la bajro17 »

ljudi treba mi pomoc oko ovog zadatka zeza me '\0' nece nikako da mi ispadne kako treba

#include <iostream>
#include <conio.h>
using namespace std;

void unos (char [], int);
int slova(char [], char [], int);
int vokali(char [], int);
int main()
{
const int a = 7;
char niz1[a], niz2[a];
niz1[a-1] = '\0';
niz2[a-1] = '\0';
cout << "Unesite elemente prvog niza" << endl;
unos(niz1, a);
cout << "Unesite elemente drugog niza" << endl;
unos(niz1, a);
cout << "Ukupno slova u oba niza ima " << slova(niz1, niz2, a) << endl;
cout << "Ukupno vokala u prvom nizu ima " << vokali(niz1, a) << endl<< endl << endl << endl;
for(int i = 0; i < a-1; i++)
cout << niz1 << endl;
for(int x = 0; x < a -1; x++)
cout << niz2[x] << endl;
getch();
return 0;
}
void unos (char niz1[], int a)
{
for(int i = 0; i < a - 2; i++)
{
cin >> niz1;
}

cin.ignore(10000, '\n');

}
int slova(char niz1[], char niz2[], int a)
{
int brSlova = 0;
for(int i = 0; i < a - 1; i++)
{
if(niz1 >= 'a' && niz1 <= 'z')
brSlova++;
else if(niz1 >= 'A' && niz1 <= 'Z')
brSlova++;

}

for(int x = 0; x < a-1; x++)
{
if(niz2[x] >= 'a' && niz2[x] <= 'z')
brSlova++;
else if(niz2[x] >= 'A' && niz2[x] <= 'Z')
brSlova++;

}
return brSlova;
}
int vokali(char niz1[], int a)
{
int brSamo = 0;
for(int i = 0; i < a-1; i++)
{
if(niz1 == 'a' || niz1 == 'A' || niz1 == 'e' || niz1 == 'E' || niz1[i] == 'i' || niz1[i] == 'I' || niz1[i] == 'o' || niz1[i] == 'O' || niz1[i] == 'u' || niz1[i] == 'U')
brSamo++;
}

return brSamo;
}
Avatar
retsam
Postovi: 2254
Pridružen/a: 11 svi 2009, 16:26
Spol: M
OS: Arch Linux x86-64 subtle
Lokacija: /dev/pts/0

Re: char niz problem

Post Postao/la retsam »

Neznam koji ti je zadatak i je li eksplicitno navedeno dasam moraš pisati funkciju za unos i brojanje slova, evo nešt sam nabrzinu napisao:

Kod: Označi sve

#include <stdio.h>
#include <ctype.h>
#define VPOL 7

int vokali(char *, int);
int slova(char *, int);

int main()
{
	char niz1[VPOL], niz2[VPOL];
	printf("Unesite elemente prvog niza: \n");
	scanf("%s", niz1);
	printf("Unesite elemente drugog niza: \n");
	scanf("%s", niz2);
	printf("Ukupno slova u oba niza ima: %d\n", slova(niz1, VPOL) + slova(niz2, VPOL));
	printf("Ukupno vokala u prvom nizu ima: %d\n\n\n\n", vokali(niz1, VPOL));
	printf("%s\n%s\n", niz1, niz2);
	return(0);
}

int slova(char *niz, int vel)
{
	int brSlova, i;
	brSlova = 0;
	for (i = 0; niz[i] != '\0'; i++)
		if (isalpha(niz[i]))
			brSlova++;
	return(brSlova);
}

int vokali(char *niz, int vel)
{
	int brSamo, i;
	brSamo = 0;
	for(i = 0; i < vel; i++)
		if(niz[i] == 'a' || niz[i] == 'A' || niz[i] == 'e' || niz[i] == 'E' || niz[i] == 'i' || niz[i] == 'I' || niz[i] == 'o' || niz[i] == 'O' || niz[i] == 'u' || niz[i] == 'U')
			brSamo++;

	return(brSamo);
}
Ken Thompson je napisao/la:One of my most productive days was throwing away 1000 lines of code.

Pikacode - Arch configs
Pikacode - dwm config
Avatar
nicky
Site Admin
Postovi: 2074
Pridružen/a: 07 pro 2007, 16:30
Spol: Ž
OS: ubuntu 12.04
Lokacija: Zagreb

Re: char niz problem

Post Postao/la nicky »

Čini mi se da imaš par grešaka:

1. Kad zoveš funkciju unos(niz1, a); oba puta pošalješ polje niz1 pa se samim time prvouneseno polje u niz1 prebriše
2. u funkciji unos bi trebao poslije for petlje dodati niz1[a-1] = 0;
Avatar
retsam
Postovi: 2254
Pridružen/a: 11 svi 2009, 16:26
Spol: M
OS: Arch Linux x86-64 subtle
Lokacija: /dev/pts/0

Re: char niz problem

Post Postao/la retsam »

Nicky je navela problem što prepišeš niz 1, a imaš još jedan problem(bug) ovdje:

Kod: Označi sve

void unos (char niz1[], int a)
{
for(int i = 0; i < a - 2; i++)
{
cin >> niz1[i];
}

cin.ignore(10000, '\n');

}
Ti vrtiš petlju od 0 do 5 (a ne do 6) dakle to jedno mjesto na indexu 5 ti ostaje prazno(?). Ja sam malo prepravio svoj prošli kod dodao funkciju unos, doduše napisano je u C-u, tako da ako ti baš treba možeš pokušati prepisati u c++, a radit će ti i ovaj kod ako uključiš potrebne library-e:

Kod: Označi sve

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

/* magic number */
#define VPOL 7

int vokali(char *, int);
int slova(char *, int);
void unos(char *, int);

int main()
{
   char *niz1, *niz2;
   niz1 = malloc(VPOL * sizeof(char));
   niz2 = malloc(VPOL * sizeof(char));
   if (niz1 == NULL  || niz2 == NULL) {
      printf ("No memory");
      exit(1);
   }
   printf("Unesite elemente prvog niza: \n");
   unos(niz1, VPOL);
   printf("Unesite elemente drugog niza: \n");
   unos(niz2, VPOL);
   printf("Ukupno slova u oba niza ima: %d\n", slova(niz1, VPOL) + slova(niz2, VPOL));
   printf("Ukupno vokala u prvom nizu ima: %d\n\n\n\n", vokali(niz1, VPOL));
   printf("%s\n", niz1);
   
   /* oslobodi memoriju */
   free (niz1);
   free (niz2);
   return(0);
}

void unos (char *niz, int a)
{
	int i;
	for(i = 0; i < a - 1; i++)
	{
      niz[i] = getchar();
	}
   niz[i-1] = 0;
}

int slova(char *niz, int vel)
{
   int brSlova, i;
   brSlova = 0;
   for (i = 0; niz[i] != 0; i++)
      if (isalpha(niz[i]))
         brSlova++;
   return(brSlova);
}

int vokali(char *niz, int vel)
{
   int brSamo, i;
   brSamo = 0;
   for(i = 0; i < vel; i++)
      if(niz[i] == 'a' || niz[i] == 'A' || niz[i] == 'e' || niz[i] == 'E' || niz[i] == 'i' || niz[i] == 'I' || niz[i] == 'o' || niz[i] == 'O' || niz[i] == 'u' || niz[i] == 'U')
         brSamo++;

   return(brSamo);
}
Ken Thompson je napisao/la:One of my most productive days was throwing away 1000 lines of code.

Pikacode - Arch configs
Pikacode - dwm config
Odgovori