Počítání jedlotlivých znaků v řetězci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Počítání jedlotlivých znaků v řetězci – C / C++ – Fórum – Programujte.comPočítání jedlotlivých znaků v řetězci – C / C++ – Fórum – Programujte.com

 

Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #1
-
0
-

Dobrý den potřeboval bych poradit jak zjistit výskyt jednotlivých písmen v řetězci s1 a výsledek vytisknout do řetězce s2.

např. char s1[]= ("ahoj jak se mas");

tak aby to vytisklo: a3,e1,h1,k1,o1,j2,m1,s2

Děkuji za odpověď.

Nahlásit jako SPAM
IP: 90.180.21.–
JoDiK
~ Anonymní uživatel
987 příspěvků
2. 2. 2014   #2
-
0
-

#1 Karel
Zaveď si výsledkové pole, jehož indexy budou znaky (nebo ascikódy znaků) a vynuluj ho.

Projdi zadaný řetězec znak po znaku a přičítej jedničku k odpovídající položce pole.

Pak vypiš indexy a hodnoty výsledkového pole...

Nahlásit jako SPAM
IP: 88.103.233.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #3
-
0
-

Myslíš:


    long nc;
    nc = 0;
    while (getchar() != EOF)
    ++nc;
    printf("%1d\n",nc);

?

pokud ano tak nevím kam přesně to správně vložit.

Nahlásit jako SPAM
IP: 90.180.21.–
JoDiK
~ Anonymní uživatel
987 příspěvků
2. 2. 2014   #4
-
0
-

#3 Karel
Kde tam máš to pole?

Jestli pole neumíš, tak si zaveď 24 proměnných a,b,c,d,...z a přičítej to do nich nějakým case...

PS: nezapomeň velká písmena převést na malá případně naopak...

Nahlásit jako SPAM
IP: 88.103.233.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #5
-
0
-

#4 JoDiK
Sorry já sem začátečník, jaký   case?

A ještě nevím jak prohledat ten řetězec.

Nahlásit jako SPAM
IP: 90.180.21.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #6
-
0
-

#4 JoDiK
V jedný knížce sem našel tohle:

main() /*pocitani cisel, oddelovacu, ostatnich*/
{
int c, i, nwhite, nother, ndigit [10];
nwhite = nother = 0;
for(i = 0; i < 10; i++)
ndigit [i] = 0;
while((c = getchar ()) != EOF)
switch(c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
ndigit[c-'0']++;
break;
case ' ':
case '\n':
case '\t':
nwhite++;
break;
default:
nother++;
break;
}
printf("digits = ");
for(i = 0; i<10; i++)
printf(" %d ", ndigit[i]);
printf("\nwhite space = %d, other =
%d\n", nwhite, nother);
}

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #7
-
0
-

#1 Karel
Třeba nějak takhle: 

const char* s = "nhssahdatvhvmaljsjhbchgajadlHDSEEFz";
int pocty[27];
memset(pocty, 0, sizeof(pocty));
while (*s)
{
	if (*s >='a' && *s <= 'z')
	{
		pocty[*s - 'a']++;
		s++;
		continue;
	}
	if (*s >='A' && *s <= 'Z')
	{
		pocty[*s - 'A']++;
		s++;
		continue;
	}
	s++;
}
for (int i = 0; i < 27; i++)
{
	if (pocty[i] > 0)
		printf("%c%d\t", 'a'+i, pocty[i]);
}

PS: těch 27 je, jak alespoň doufám:-) počet (anglických) písmen

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #8
-
0
-

#7 Radek Chalupa
Děkuji za odpověď

ale ve VB mi to podtrhlo: const, memset, čárku za pocty a while

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #9
-
0
-

#8 Karel
chlape, tohle je forum C++:-)

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #10
-
0
-

já to spletl píšu ve  Microsoft visual C++ :-)

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #11
-
0
-

#10 Karel
pak možná jedině to chce #include <memory.h>

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #12
-
0
-

#11 Radek Chalupa
zmizelo podškrtnutí const ale zbytek zůstal

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #13
-
0
-

#12 Karel
No nevím, ale když jsem výše uvedený kód vložil do main nové konzolové aplikace (vygenerované ve Visual C++ 2008), přidal memory.h (do stdafx.h), šlo to sestavit, spustit a vypsalo výsledky, samozřejmě ještě za kód přidat getchar nebo podobnou "zarážku".

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #14
-
0
-

#13 Radek Chalupa
Ano jde to já blbec tim #include <memory.h> přepsal #include "stdafx.h".

Ještě jedna věc kam přesně mám dát to getchar;?

zkoušel sem několik míst ale vždy console jen problikne

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #15
-
0
-

#14 Karel
Před return 0; A pokud před tím načítáš znaky z klávesnice, tak možná bude potřeba getchar 2x za sebou, ten první sežere enter ze zadávání.

A samozřejmě getchar(); - tj s "volací" závorkou, jinak bys tam napsal jen nějaké číslo - adresu té funkce:-)

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #16
-
0
-

Jo getchar(); já tam dával jenom getchar; :-)

můžete mi ještě popsat co dělá to memset(pocty, 0, sizeof(pocty)); a #include <memory.h>?

Nahlásit jako SPAM
IP: 90.180.21.–
Radek Chalupa
~ Redaktor
+1
Super člen
2. 2. 2014   #17
-
0
-

#16 Karel
vynuluje paměť a vloží (textově) obsah souboru na uvedené místo.

Pokud se chceš naučit programovat, musíš se naučit používat dokumentaci/help, kde je tohle popsané. U každé funkce je v dokumentaci (MSDN) popsán význam jednotlivých parametrů a také hlavičkový soubor ve kterém je fce deklarovaná (popř.je tam i kód funkce), a #include je určitě v jedné z prvních lekcí/stránek každé učebnice céčka.

Radek Chalupa 
- vývoj software na zakázku 
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC) 
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Karel
~ Anonymní uživatel
167 příspěvků
2. 2. 2014   #18
-
0
-

Fakt moc děkuju :-)

Nahlásit jako SPAM
IP: 90.180.21.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

četnost znaků v řetězci — založil Petr Schenk

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý