Kehittäjille
C++ merkkilaskuri: laske merkit merkkijonosta
Valmiit C++-koodiesimerkit merkkien laskentaan: kaikki merkit, merkit ilman välilyöntejä ja sanamäärä. Lisäksi tärkeät UTF-8-huomiot. Voit testata laskennan myös suoraan selaimessa.
Merkkiraja tai tavoite
Laskettu välilyönnit mukaan. Vaihda laskentaperustetta alla olevalla kytkimellä.
Merkkirajat eri kanavissa (merkit välilyönneillä)
Näytä tekstianalyysi
Yleisimmät sanat
- Kirjoita tekstiä nähdäksesi yleisimmät sanat.
1. Kaikki merkit merkkijonosta
Perustapa laskea merkit C++:ssa on std::string-luokan size()- tai length()-metodi. Ne palauttavat merkkijonon pituuden tavuina. Puhtaassa ASCII-tekstissä tavumäärä vastaa merkkien määrää.
// Kaikki merkit (tavuina)
#include <iostream>
#include <string>
int main() {
std::string teksti;
std::getline(std::cin, teksti);
std::cout << "Merkkeja: " << teksti.size() << "\n";
return 0;
}
2. Merkit ilman välilyöntejä
Kun haluat laskea vain varsinaiset merkit, käy merkkijono läpi ja ohita tyhjät merkit funktiolla std::isspace. Näin saat vastineen sivun laskurin välilyönnittömälle luvulle.
// Merkit ilman valilyonteja
#include <iostream>
#include <string>
#include <cctype>
int main() {
std::string t; std::getline(std::cin, t);
int n = 0;
for (unsigned char c : t)
if (!std::isspace(c)) n++;
std::cout << "Ilman valilyonteja: " << n << "\n";
return 0;
}
3. Sanamäärä
Sanat saa laskettua kätevästi std::istringstream-virralla, joka pilkkoo tekstin sanoiksi välilyöntien kohdalta.
// Sanamaara
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string rivi; std::getline(std::cin, rivi);
std::istringstream iss(rivi);
std::string sana; int sanat = 0;
while (iss >> sana) sanat++;
std::cout << "Sanoja: " << sanat << "\n";
return 0;
}
UTF-8: tavut eivät ole sama kuin näkyvät merkit
Tämä on tärkein sudenkuoppa suomenkielisessä tekstissä. std::string::size() palauttaa tavumäärän, ei näkyvien merkkien määrää. UTF-8-koodauksessa kirjaimet ä, ö ja å vievät kaksi tavua ja monet emojit jopa neljä. Siksi sana "pää" voi näyttää olevan viisi tavua, vaikka näkyviä merkkejä on kolme.
Muista: jos haluat laskea näkyvät merkit UTF-8-tekstistä, sinun täytyy tulkita koodaus – esimerkiksi laskea vain tavut, jotka eivät ala bittikuviolla 10xxxxxx. Selaimessa toimiva laskuri yllä käyttää grafeemipohjaista laskentaa, joten voit verrata sen tulosta koodiisi.
Viimeisimmät laskelmat
Laskelmat tallentuvat vain omaan selaimeesi, jotta voit palata niihin myöhemmin.
UKK
Usein kysytyt kysymykset
Miten lasken merkit merkkijonosta C++:ssa?
Yksinkertaisin tapa on käyttää std::string-luokan size()- tai length()-metodia. Ne palauttavat merkkijonon pituuden tavuina. ASCII-teksteissä tämä vastaa merkkien määrää, mutta UTF-8-teksteissä ä, ö ja emojit voivat viedä useita tavuja.
Miten lasken merkit ilman välilyöntejä?
Käy merkkijono läpi ja ohita välilyönnit, esimerkiksi tarkistamalla isspace(). Voit myös poistaa vain tavalliset välilyönnit tai kaikki tyhjät merkit sen mukaan, mitä tarvitset.
Miksi ä ja ö lasketaan väärin?
std::string mittaa pituuden tavuina. UTF-8:ssa skandimerkki vie kaksi tavua, joten näkyvien merkkien määrä ja tavumäärä eroavat. Näkyvien merkkien laskemiseen tarvitaan koodauksen huomioiva käsittely.
Voinko kokeilla laskentaa ilman kääntäjää?
Kyllä. Liitä merkkijono yllä olevaan laskuriin, niin näet merkit välilyönneillä ja ilman heti selaimessa. Näin voit verrata tulosta C++-koodisi tulosteeseen.
Muut laskurit ja oppaat
Jatka näihin työkaluihin
Sisäisesti linkitetyt työkalut ja oppaat, jotka täydentävät tätä sivua.