Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczba znaków w wyrazie (string)

Ostatnio zmodyfikowano 2013-11-24 22:47
Autor Wiadomość
Miralem
Temat założony przez niniejszego użytkownika
Liczba znaków w wyrazie (string)
» 2013-11-24 13:00:28
C/C++
#include <iostream>
#include <string>

int main() {
    int n;
    std::cin >> n;
    std::string wyrazy[ 10 ];
    for( int i = 0; i < n; i++ ) {
        std::cin >> wyrazy[ i ];
    }
    return 0;
}
W jaki sposób mogę teraz wyświetlić liczbę wszystkich znaków w pojedynczym wyrazie tej tablicy?
P-97268
Mitu
» 2013-11-24 13:23:23
C/C++
for( int i = 0; i < n; i++ )
{
    std::cout << wyrazy[ i ].length();
}
P-97272
Miralem
Temat założony przez niniejszego użytkownika
» 2013-11-24 13:34:55
Dzięki, a teraz mam pytanie, czy tutaj również indeksy liter są podobnie przedstawione jak w ASCII? Bo potrzebuję jeszcze ilości małych liter, dużych liter, cyfr czy znaków interpunkcyjnych.
P-97273
kubek3898
» 2013-11-24 13:39:27
Tak. Choć zapewne szybciej byś to sprawdził samemu, testując.
P-97276
Miralem
Temat założony przez niniejszego użytkownika
» 2013-11-24 13:58:39
A jak wyznaczyć do sprawdzenia pojedynczą literę z wyrazu string, bo oczywiście to mi nie przechodzi:

C/C++
#include <iostream>
#include <string>

int main() {
    int n;
    std::cin >> n;
    std::string wyrazy[ 10 ];
    for( int i = 0; i < n; i++ ) {
        std::cin >> wyrazy[ i ];
        std::cout << wyrazy[ i ].length() << std::endl;
    }
    for( int i = 0; i < n; i++ ) {
        if( wyrazy[ i ] >= 65 && wyrazy[ i ] <= 90 ) {
            std::cout << wyrazy[ i ] << " ";
        }
    }
    return 0;
}
P-97285
Buby
» 2013-11-24 14:09:18
Odwołasz się do litery w ten sposób:
C/C++
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string Wyrazy[ 10 ];
   
    Wyrazy[ 1 ] = "Wyraz";
   
    cout << Wyrazy[ 1 ][ 2 ]; // Wypisze 'r'
}

Zapis
Wyrazy[ 1 ][ 2 ]
 oznacza, że odwołujemy się do znaku z pozycji 3, zmiennej typu string, o numerze 1 w tablicy wyrazy. Program wypisze r, ponieważ w tablicy znaki są numerowane od zera.



Ja osobiście poleciłbym Ci funkcje
islower()
,
ispunct()
,
isdigit()
 oraz
isupper()
 ze standardu C.
Funkcje znajdują się w pliku nagłówkowym
#include <ctype.h>
.
Funkcja
islower()
 sprawdza czy znak jest małą literą, a
isupper()
 czy dużą. Natomiast
isdigit()
 sprawdza czy znak jest liczbą, a
ispunct()
 czy to znak interpunkcyjny lub specjalny.

Przykładowy kod:

C/C++
#include <iostream>
#include <ctype.h>
#include <string>
#include <vector>

int main()
{
    std::string Napis = "TaKi! 1, N4Pi$ >";
    std::vector < char > ZnakMaly;
    std::vector < char > ZnakDuzy;
    std::vector < char > Liczby;
    std::vector < char > Interpunkcja;
   
    for( size_t i = 0; i < Napis.size(); ++i )
    {
        if( islower( Napis[ i ] ) )
             ZnakMaly.push_back( Napis[ i ] );
       
        if( isupper( Napis[ i ] ) )
             ZnakDuzy.push_back( Napis[ i ] );
       
        if( isdigit( Napis[ i ] ) )
             Liczby.push_back( Napis[ i ] );
       
        if( ispunct( Napis[ i ] ) )
             Interpunkcja.push_back( Napis[ i ] );
       
    }
   
    std::cout << "Male znaki:" << std::endl;
   
    for( int i = 0; i < ZnakMaly.size(); ++i )
         std::cout << ZnakMaly[ i ] << ",";
   
   
   
    std::cout << "\nDuze znaki:" << std::endl;
   
    for( int i = 0; i < ZnakDuzy.size(); ++i )
         std::cout << ZnakDuzy[ i ] << ",";
   
   
    std::cout << "\nLiczby: " << std::endl;
   
    for( int i = 0; i < Liczby.size(); ++i )
         std::cout << Liczby[ i ] << ",";
   
   
    std::cout << "\nZnaki interpunkcyjne: " << std::endl;
   
    for( int i = 0; i < Interpunkcja.size(); ++i )
         std::cout << Interpunkcja[ i ] << " ";
   
}

Wyjście programu:

Male znaki:
a,i,i,
Duze znaki:
T,K,N,P,
Liczby:
1,4,
Znaki interpunkcyjne:
! , $ >
P-97289
pekfos
» 2013-11-24 17:31:31
Funkcje znajdują się w pliku nagłówkowym
#include <ctype.h>
.
W C++ powinno się używać <cctype>.
P-97335
Buby
» 2013-11-24 18:10:05
@pekfos,
Zbyt dużej różnicy nie ma, jeśli używasz ich w domyślny sposób.
Biblioteki z 'C' przerobione do 'C++' różnią się tylko tym, że ich funkcji można
używać w przestrzeni nazw std.

C/C++
std::printf( "Jakis tam tekst" );
/* Wykonuje to samo co zapis */
printf( "Jakis tam tekst" );

Czytałem o tym ostatnio na wikibooks.
http://pl.wikibooks.org/wiki​/C++​/Przestrzenie_nazw#Korzystanie_z_biblioteki_standardowej_C

Chociaż biblioteki dołączane ze starymi nazwami, mogą wywoływać czasem ostrzeżenia lub błędy.
P-97357
« 1 » 2
  Strona 1 z 2 Następna strona