• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

[C] Да се најдат сите зборови во некој текст внесен преку тастатура

  • Ја почнал/а темата
  • #1

jovanco76

Intern
11 јануари 2008
13
0
Znaci potrebno e prvo da se vnese nekoj tekst preku tastatura,
koristejki gi, na primer, naredbite
printf("Vnesi Tekst: ");
scanf("%s",tekst);

Primer:
Vlez: Jas sum od Struga
Izlez: Zborovi se: Jas, sum, od, Struga

Jas ja napraviv vaka ama vikaat deka ne e tocna deka postavenosta ne treba da bide takva. Postavenosta na zadacata e sledna:

Да се најдат сите зборови во некој текст внесен преку тастатура
Објаснување. Зборовите во тектс се одделени со едно или повеке празни места. Значи почетокот на некој збор е по празно место а по крајот на зборот има празно место .

Arno ama ne bila vaka, dali nekoj znae kako e?!!

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

int main(int argc, char *argv[])
{
char zbor1[100];
char zbor2[100];
char zbor3[100];
char zbor4[100];
char zbor5[100];
scanf("%s",zbor1);
scanf("%s",zbor2);
scanf("%s",zbor3);
scanf("%s",zbor4);
scanf("%s",zbor5);
printf("Vnesenite zborovite se %s,%s,%s,%s,%s\n",zbor1,zbor2,zbor3,zbor4,zbor5);



system("PAUSE");
return 0;
}
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Јок. Вака ти работи само за 5 збора, а треба да се направи да работи за било колкав број на зборови.

Помош:
1. Стави еден while циклус додека не дојде до крај на реченицата/стрингот "\0" - мислам дека ова беше знакот.
2. Внатре во циклусот штом дојде до буква, стај еден флег (на пример vozbor=1) кој ќе означува дека си во зборот. Штом дојдеш до наредно празно место, стај го флегот vozbor=0 и зголеми го бројот на зборови.
3. Ако има повеќе последователни празни места треба да ги рипа
4. Зошто ти е флегот vozbor? Aко дојде до знакот за крај, а бил во збор тој збор нема да ти го избори. Значи отако ќе излезеш од циклусот, ќе го провериш тој флег и ако бил 1, значи претходно бил во збор и ќе го зголемиш бројот на зборови за уште еден.

Мислам дека ова ќе те насочи како да ја решиш задачата.
 

''TcM>>

Intern
6 јануари 2008
961
39
Eve vaka nesto na ovoj lesen nacin uspeav da ja resam:

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

int main(int argc, char *argv[])
{
int n,i=0,m=0;
char zbor[100];
printf("Vnesi kolku zbora ima vo recenicata:");
scanf("%d",&n);
for(printf("\nVnesi ja recenicata:");i<n;i++)
{scanf("%s",&zbor);
printf("\nZborovi vo recenicata se:");
printf("%s, ",zbor);
}
printf("\n");

system("PAUSE");
return 0;
}

Ama sea uste samo sto ne znam kako da go isklucam toa "Zborovi vo recenicata se:"...
Valda ke uspees ti nekako da se snajdes (Ako nesto vaka e toa sto go baras...)
pozz
 

''TcM>>

Intern
6 јануари 2008
961
39
Da ja cacnam pak temava, ami dali ima nekoj predlog kako toa Zborovi vo recenicata se: i da se naredat, a da ne bide posle sekoj zbor Zborovi vo recenicata se i pak i pak kolku sto ima.. PLzz kazete oti mene me interesira :)
Pozz
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
...treba samo 1 scanf da stais i da vneses cela recenica, posle u while ciklus vikas dodeka naredniot karakter e bukva pecati go, ako e prazno mesto, togas pocni nov red. taka site zbrovi ke ti se ispecatat vo nov red, ke dobies kolona od zborovi. nea potreba od znamenca i stavanje na zborovi vo promenlivi ili nizi

eve edno resenie vo C++, samo ke treba da smenis neso u sintaksa kako scanf iprintf namesto cin i cout, so razlicni biblioteki e raboteno

// od vnesena recenica da se pecati zbor po zbor

#include<iostream>
using namespace std;
void main()
{
char s[100];
int i=0,n;
cout<<"vnesi edna recenica"<<endl;
cin.getline(s,100);
while(s!=0)
{
cout<<s;
if(s==' ')
cout<<endl;
i++;

}

}
 
  • Ја почнал/а темата
  • #7

jovanco76

Intern
11 јануари 2008
13
0
E i jas se cudev sto e toa ,,po ova po ona po neznam so..... inace ne treba zborovite da se redat vo kolona tuku da se vo eden red so po edno prazno mesto i slicno............
 

misovski

Intern
3 мај 2007
59
0
vaka ke napraves:
ke kreiras promenliva koja sto ke gi broi zborovite (na pr. int zbor)
posle ke kreiras uste edna promenliva X so koja ke se dvizes nis bukvite i koga promenlivata X ke naide na prasno mesto ke imas:
if(x==' '){
zbor++}
i na kraj ke pecatis printf("Ima vkupno zborovi %d\n", zbor);
programa e vo 5-6 reda i nisto poveke
 

dime

Intern
13 мај 2008
163
3
Pa ne bas taka, smetaj deka zborovite moze da bidat oddeleni i so drugi znakovi kako zapirka, prasalnik i sl. a ne samo so prazno mesto ;) U 2 reda moze so regexp da se napise, ama vrska nemam C++ kako raboti so regular expressions..
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
misovski i dime

јас како што разбрав треба да ги и испечати тие зборови
и во с треба да е не с++

го имам ова работено но одамна така да само ке ти кажам како да го поставиш

реченицатаа ке ја ставиш во матрица и ке направис уште една матрица
и ке почнеш да шеташ низ првата матрица
for(1=0;i:=n;i++)
if((a==' ')||(a==',')......) site moжни варијанти за оделување на зборови кои сакаш да ги евидентираш (мислам дека || беше "или" во с++ и с не сум сигурен одамна не сум работел)

и во тоа if доколку налети на условот ке ставиш
b[p]=a;
p++

и на крај ке земаш да ти печати матрицата а од
a[1] до (b[1])-1 pa od (b[2])+1 do (b[3])-1 se do kolku imaш бе или пак можеш да го ставиш и тоа во уште еден for циклус па наместо b[1]... da bide b[p]

така во фор ке ти биде подобро само стави ја a[1] до (b[1])-1 да ти ја печати пред for, a for da пoчнува од 2ра вредност

се надевам дека ти разјаснив повеке позз
 

vik

Intern
14 април 2007
1,936
31
Имам едно прашање. Што ако во реченицата има интерпункциски знаци пример : . , ? ! Што со нив? Се рачунаат во збор или се скокаат?
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
@vik vo погорниот пост напишав програмата ке работи како ке ја испрограмира програмерот освен ако не знае што работи :))

if((a==' ')||(a==',')......) тука ги внесувате сите знаци кои сакате
 

vik

Intern
14 април 2007
1,936
31
:)):))
Не тоа, прашањето беше како бараат професорите да работи?
 

misovski

Intern
3 мај 2007
59
0
a moze li vaka??
#include <stdio.h>
void main()
{
char z;
int brzbor=1;
printf("Vnesi recenica so tocka \n");
printf("Ke ti kaze kolku zborovi ima \n");
while((z=getchar())!='.')
if(z==' ')
brzbor++;
printf("Ima vkupno %d zborovi \n", brzbor);
}

eve i koga ke ima tocka (.) ke izleze od while ciklus.
 

loverboy

Intern
6 февруари 2008
147
11
@ misovski
Добро е објаснето што треба програмата да даде како излез ;-)

А да се вратам на задачата. Најоптималното решение би било она каде што се користи што е можно помалку меморија. MetalGear кажа едно решение, но според мене е непотребно толку комплицирање за едноставна задача. Значи алгоритмот е овој:
1. Ја сместуваш целата речениза во некоја низа од знаци
2. Ја читаш низата од знаци од почетокот и крајот и го печатиш тоа што ти треба, првото празно место се заменува со ", ".

Код:
#include<stdio.h>

int main() {
  char tekst[10000];
  char c;
  int i=0,beli=1;
  printf("Vnesi Tekst: ");
  
  for (;;) {
    scanf("%c",&tekst[i]);
    if (tekst[i]=='n') {
      break;
    }
    i++;
  }
  i=0;
  while (tekst[i]!='n') {
    if ((tekst[i]==' ')&&(beli==0)) {
      printf(", ");
      beli=1;
    }
    if (tekst[i]!=' ') {
      printf("%c",tekst[i]);
      beli=0;
    }
    i++;
  }
  
  return 0;
}
Еве ти го според мене најоптималното решение.

П.С.
Имам едно прашање. Што ако во реченицата има интерпункциски знаци пример : . , ? ! Што со нив? Се рачунаат во збор или се скокаат?
Ова не е дефинирано

П.С. (оваа тема е од пред 4 месеца????!!!! аууу, сега видов, ај може на некој ќе му користи решението :D )

Поздрав
 

Едвин

Intern
8 декември 2011
4
0
Skopje
Може некој да ми каже каде е проблемот во задачава ... да се избори колку зборови има во стрингот ако на почетокот има празно место и помеѓу секој збор има празно место ??

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

int main(int argc, char *argv[])
{
char niza[100];
int i=0,brojac=0;
printf("Vnesi text");
scanf("%s",niza);
while(niza!='\0'){
if(niza==' '){
brojac++;
}
i++;
}
printf("texot ima %d zbora\n",brojac-1);
system("PAUSE");
return 0;
}
 

DekoRoker

Gaining Experience
12 септември 2009
625
53
Скопје
dejan.at.mk
имаш i++ а покажувачот на низата не го поместуваш.. Infinite loop... или во while и if делот стави niza или тргни ја променливата i и наместо i++ стави niza++. ова од око ти кажувам, не сум компелирал да видам точно како е...
 

DekoRoker

Gaining Experience
12 септември 2009
625
53
Скопје
dejan.at.mk
Абе немаш i во while и if блоковите гледај што си постирал... Ова кај мене се компелира, ако не ти компелира, смени компајлерот... Нареден пат секаков код ставај го со CODE wrapper

Код:
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
char niza[100];
int i=0,brojac=0;
printf("Vnesi text");
scanf("%s",niza);
while(niza[i]!='\0'){
    if(niza[i]==' '){
        brojac++;
    }
    i++;
}
printf("texot ima %d zbora\n",brojac-1);
system("PAUSE");
return 0;
}
 

Нови мислења

Последни Теми

Статистика

Теми
43,505
Мислења
822,070
Членови
28,046
Најнов член
hittrajkovski
На врв Дно