Pereiti prie turinio

Ieškau ilgiausio žodžio simbolių masyve (C)


Rekomenduojami pranešimai

Sveiki, užduotis: rasti ilgiausią žodį simbolių masyve;

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);

   len = strlen(sakinys) + 1;

   for(i=0; i < len; i++) {
       if(sakinys[i] != ' ' || sakinys[i] != '\0') {
           wordLen++;
       } else {
           if(wordLen > maxLen) {
               maxLen = wordLen;
               wordLen = 0;
           }
       }
   }

   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
}

nesuprantu, kas blogai. Visada gaunu 0. Gal matot, ko nematau? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
#include<stdio.h>

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);

   len = strlen(sakinys) + 1;

   for(i = 0; i < len; i++) {
       if (sakinys[i] != ' ' || sakinys[i] != '\0') {
           wordLen++;
           printf("%d, |%c| \n", wordLen, sakinys[i]);
       }

       if (wordLen > maxLen && sakinys[i] == ' ' || sakinys[i] == '\0') {
           maxLen = wordLen - 1;
           wordLen = 0;
       }
   }

   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
}

Redagavo driule
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Programoje norėtųsi daugiau tvarkos – sunku įskaityti.

 

C++ šiek tiek primiršęs, o prie C taip ir nesedėjęs, tai nesupratau, ką ten tas '\0' veikia, tačiau vienu ar kitu atveju, ta if sąlyga yra neteisinga.

 

Taškas sakinio gale – kad patikrintų ir paskutinį žodį. Galima racionaliau/gražiau, tačiau čia jau Tavo reikalas.

 

#include <string.h>
#include <stdio.h>

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);
sakinys[strlen(sakinys)] = '.';
   for(i=0; i < strlen(sakinys); i++) 
  {
       if((sakinys[i] >= 'A' && sakinys[i] <= 'Z') || (sakinys[i] >= 'a' && sakinys[i] <= 'z'))
       {
           wordLen++;
       }
       else 
       {
		if(wordLen > maxLen) 
		{
			maxLen = wordLen;
		};
		wordLen = 0;
	}
     }


   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
   printf("%s", sakinys);
}

Iveskite savo sakini(Pauliaus versija): 
Driulevienasvienas, Tavo kodas, mano nuomone, nera geras

Ilgiausia zodi sudaro: 18 simboliu 

 

 

Iveskite savo sakini (driule versija): 
Driulevienasvienas, Tavo kodas, mano nuomone, nera geras
1, |D| 
2, |r| 
3, |i| 
4, |u| 
5, |l| 
6, |e| 
7, |v| 
8, |i| 
9, |e| 
10, |n| 
11, |a| 
12, |s| 
13, |v| 
14, |i| 
15, |e| 
16, |n| 
17, |a| 
18, |s| 
19, |,| 
20, | | 
1, |T| 
2, |a| 
3, |v| 
4, |o| 
5, | | 
6, |k| 
7, |o| 
8, |d| 
9, |a| 
10, |s| 
11, |,| 
12, | | 
13, |m| 
14, |a| 
15, |n| 
16, |o| 
17, | | 
18, |n| 
19, |u| 
20, |o| 
21, |m| 
22, |o| 
23, |n| 
24, |e| 
25, |,| 
26, | | 
1, |n| 
2, |e| 
3, |r| 
4, |a| 
5, | | 
6, |g| 
7, |e| 
8, |r| 
9, |a| 
10, |s| 
11, || 

Ilgiausia zodi sudaro: 10 simboliu 

 

#include<stdio.h>

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);

   len = strlen(sakinys) + 1;

   for(i = 0; i < len; i++) {
       if (sakinys[i] != ' ' || sakinys[i] != '\0') {
           wordLen++;
           printf("%d, |%c| \n", wordLen, sakinys[i]);
       }

       if (wordLen > maxLen && sakinys[i] == ' ' || sakinys[i] == '\0') {
           maxLen = wordLen - 1;
           wordLen = 0;
       }
   }

   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
}

Patikrinau Tavo programą, kažkas ne taip. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, užduotis: rasti ilgiausią žodį simbolių masyve;

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);

   len = strlen(sakinys) + 1;

   for(i=0; i < len; i++) {
       if(sakinys[i] != ' ' || sakinys[i] != '\0') {
           wordLen++;
       } else {
           if(wordLen > maxLen) {
               maxLen = wordLen;
               wordLen = 0;
           }
       }
   }

   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
}

nesuprantu, kas blogai. Visada gaunu 0. Gal matot, ko nematau? :)

 

if(sakinys[i] != ' ' || sakinys[i] != '\0')

 

Megink keist i:

 

if(sakinys[i] != ' ' && sakinys[i] != '\0')

 

Turetu veikt.

Redagavo facis1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

if(sakinys[i] != ' ' || sakinys[i] != '\0')

 

Megink keist i:

 

if(sakinys[i] != ' ' && sakinys[i] != '\0')

 

Turetu veikt.

Išvis kažkokį kosmosą suskaičiuoja:

Iveskite savo sakini (facis ideja): 
Driulevienasvienas, Tavo kodas, mano nuomone, nera geras    

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Išvis kažkokį kosmosą suskaičiuoja:

Iveskite savo sakini (facis ideja): 
Driulevienasvienas, Tavo kodas, mano nuomone, nera geras    

 

Nezinau kuo jis tau negeras. Man viskas veikia.

 

Beje, infai, pastebejimas, kam ten rasei len = strlen(sakinys) + 1; ? To +1 nereikia :-)

Redagavo facis1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Programoje norėtųsi daugiau tvarkos – sunku įskaityti.

 

C++ šiek tiek primiršęs, o prie C taip ir nesedėjęs, tai nesupratau, ką ten tas '\0' veikia, tačiau vienu ar kitu atveju, ta if sąlyga yra neteisinga.

 

Taškas sakinio gale – kad patikrintų ir paskutinį žodį. Galima racionaliau/gražiau, tačiau čia jau Tavo reikalas.

 

 

Prie C nesedejes, bet prie C++ sedejes, ir nezinai ka reiskia '\0' simbolis? Ar prie C ar prie C++ sedejes nera skirtumo, turetum zinot, jog siuo atveju '\0' reiskia stringo pabaiga. Del tasko... Kas jeigu to tasko neives? Bugova programa bus.

 

Vietoj to, kad rasyt if(raide >= 'A' || raide <= Z) etc. kaip tu darai, galima tiesiog naudot f-ja isalpha().

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prie C nesedejes, bet prie C++ sedejes, ir nezinai ka reiskia '\0' simbolis? Ar prie C ar prie C++ sedejes nera skirtumo, turetum zinot, jog siuo atveju '\0' reiskia stringo pabaiga. Del tasko... Kas jeigu to tasko neives? Bugova programa bus.

 

Vietoj to, kad rasyt if(raide >= 'A' || raide <= Z) etc. kaip tu darai, galima tiesiog naudot f-ja isalpha().

HARP DARP AŠ GERESNIS UŽ TAVE

 

Nepriimk kiekvieno žmogaus patirties, kaip asmeninio įžeidimo... Visiškai realu, kad, ypač, jei jam C++ nėra pagrindinė kalba, jis tiesiog naudojo C++ stringus, nes why the hell not. Skirtumas yra – puikiai gali apsisukti vien su string, tau char[] ir str* funkcijų (kurios būtent ir žiūri į NUL) gali ir neprireikti :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nezinau kuo jis tau negeras. Man viskas veikia.

 

Beje, infai, pastebejimas, kam ten rasei len = strlen(sakinys) + 1; ? To +1 nereikia :-)

 

+1 reikia, kadangi tikrinu ne tik tarpus, bet ir pabaigos simboli: '\0'.

O strlen to simbolio neiskaiciuoja:)

 

if(sakinys[i] != ' ' || sakinys[i] != '\0')

 

Megink keist i:

 

if(sakinys[i] != ' ' && sakinys[i] != '\0')

 

Turetu veikt.

 

toks pakeitimas būtų nelogiškas :)

 

main() {
   char sakinys[5000];
   int len, i, wordLen = 0, maxLen = 0;

   printf("Iveskite savo sakini: \n");
   gets(sakinys);

   len = strlen(sakinys);

   for(i=0; i < len; i++) {
       if(isalpha(sakinys[i])) {
           wordLen++;
       } else {
           if(wordLen > maxLen) {
               maxLen = wordLen;
               wordLen = 0;
           }
       }
   }

   printf("\nIlgiausia zodi sudaro: %d simboliu \n", maxLen);
}

 

facis1, ačiū už idėją. Pasikoregavau. Kaip ir veikia :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O iš tiesų, problema su šiuo uždaviniu yra visai kita (tik dabar pats pastebėjau, tad kitaip sprendžiau ir mano kai kurie teiginiai šiame pranešime bus nelabai į temą – tingiu beredaguot).

Jeigu

wordLen > maxLen == False

Tada nevykdomos dvi eilutės:

maxLen = wordLen;
               wordLen = 0;

Problema yra ta, kad žodžio ilgio reikšmė „išsaugojama“ ir nepriskiriama nuliui, kol wordLen nebūna ilgesnis už maxLen.

 

Problemos sprendimą (kurį aš ir pateikiau savo pirminiame kode):

                       if(wordLen > maxLen) 
                       {
                               maxLen = wordLen;
                       };
                       wordLen = 0;

 

 

Nezinau kuo jis tau negeras. Man viskas veikia.

 

Beje, infai, pastebejimas, kam ten rasei len = strlen(sakinys) + 1; ? To +1 nereikia :-)

Na, pabandyk tekstą:

Driulevienasvienas, Tavo kodas, mano nuomone, nera geras

 

Man bent rašo: Ilgiausia zodi sudaro: 20 simboliu

 

Ilgiausias žodis yra Driulevienasvienas, ir jo ilgis yra 18 simbolių.

 

Prie C nesedejes, bet prie C++ sedejes, ir nezinai ka reiskia '\0' simbolis? Ar prie C ar prie C++ sedejes nera skirtumo, turetum zinot, jog siuo atveju '\0' reiskia stringo pabaiga. Del tasko... Kas jeigu to tasko neives? Bugova programa bus.

 

Vietoj to, kad rasyt if(raide >= 'A' || raide <= Z) etc. kaip tu darai, galima tiesiog naudot f-ja isalpha().

Dirbau su string ir buvau patenkintas. Kas, jei to taško neįves? Jo niekas ir neprašo įvesti, jį „įveda“ pati programa (žiūrėti mano kodą dar kartą). Dabar programuoju kita kalba ir kai kurias subtilybes užmiršęs.

 

Nepriimk kiekvieno žmogaus patirties, kaip asmeninio įžeidimo... Visiškai realu, kad, ypač, jei jam C++ nėra pagrindinė kalba, jis tiesiog naudojo C++ stringus, nes why the hell not. Skirtumas yra – puikiai gali apsisukti vien su string, tau char[] ir str* funkcijų (kurios būtent ir žiūri į NUL) gali ir neprireikti :)

Ačiū.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...