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

Rozbijanie ciagu znakow

Ostatnio zmodyfikowano 2016-04-03 00:08
Autor Wiadomość
Moozy
Temat założony przez niniejszego użytkownika
Rozbijanie ciagu znakow
» 2016-04-01 09:50:02
Mam problem. Jak rozbic ciag znakow podany z klawiatury np. "123456", tak zebym mogl wykonywac zadania na pojedynczych cyfrach, np. pomnozyc pierwsza z ostatnia, a reszte dodac? Nie umiem nic wykombinowac :/ program ma byc bez stringa czy tablic
P-146851
mateczek
» 2016-04-01 11:05:16
Sposób 1. podawaj cyfry po spacji:P

C/C++
#include <iostream>
using namespace std;

int main() {
    int a, b, c, d, e, f, g, h;
    cin >> a >> b >> c >> d >> e >> f >> g >> h;
    cout << a * h + b + c + d + e * f - g << endl;
   
}

Sposób 2. wczytaj stringa i przeleć go pętlą for

C/C++
#include <iostream>
using namespace std;

int main() {
    string s = "123456789";
    for( char znak: s ) {
        int cyfra = znak - '0';
        cout << cyfra << endl;
    }
}
P-146852
michal11
» 2016-04-01 12:15:15
A wiesz z góry ile będzie tych znaków ?
P-146855
Moozy
Temat założony przez niniejszego użytkownika
» 2016-04-01 18:04:47
Sam podajesz ilosc z klawiatury, mozesz wpisac 3, a mozesz wpisac 10
P-146866
michal11
» 2016-04-01 18:15:27
Tak, ale czy masz coś takiego:
C/C++
cout << "Podaj ile znakow wczytać: ";
cin >> ileznakow;

czy cos takiego:
C/C++
while( cin >> znak )
[ cpp ]

     albo inne podobne dynamiczne wczytywanie znak ó w ?
P-146868
Moozy
Temat założony przez niniejszego użytkownika
» 2016-04-01 18:32:19
i nie ile znakow, tylko odrazu liczba np. 248184
P-146870
mokrowski
» 2016-04-01 19:09:56
Brak użycia tablicy i stringa... Ale wygląda "durnowato" :-/
C/C++
#include <cstdio>
#include <cstdlib>
#include <cassert>

unsigned input_value() {
    unsigned value = 0;
   
    do {
        printf( "Podaj liczbę całkowitą większą niż 9: " );
        if( scanf( "%u", & value ) != 1 ) {
            // Czyszczenie bufora wejścia
            scanf( "%*[^\n]%*c" );
            fprintf( stderr, "To ma być liczba!\n" );
            printf( "Nie odpuszczę. " );
        }
    } while( value <= 9 );
   
    return value;
}
char * int_to_str( unsigned value, size_t len ) {
    // Miejsce na bufor znaków
    char * my_str =( char * ) malloc( len + 1 );
    if( my_str == NULL ) {
        fprintf( stderr, "Problem z alokacją pomięci\n" );
        exit( EXIT_FAILURE );
    }
   
    snprintf( my_str, len + 1, "%d", value );
   
    return my_str;
}

void process_str( char * my_str, size_t len ) {
    assert( len > 1 );
    // Ma pomnożyć pierwszy z ostatnim
    unsigned val_mul =( *( my_str ) - '0' ) *( *( my_str + len - 1 ) - '0' );
    // Sumować od 2 od "przed-ostatniego"
    int sum = 0;
    for( size_t i = 1; i <( len - 1 ); ++i ) {
        sum += *( my_str + i ) - '0';
    }
    printf( "Cyfra 1 i ostatna przemnożona to: %u\n", val_mul );
    printf( "Suma od 2 do przedostatniego to: %u\n", sum );
}

int main()
{
    unsigned value = input_value();
    size_t len;
    printf( "Podałeś liczbę: " );
    printf( "%u%n\n", value, & len );
    char * my_str = int_to_str( value, len );
    process_str( my_str, len );
    free( my_str );
}
P-146873
Gibas11
» 2016-04-01 19:23:41
C/C++
#include <cmath>
#include <iostream>
using namespace std;

int main()
{
    uint32_t n; //Podana liczba musi być dodatnia
    cin >> n;
   
    uint32_t suma = 0;
    double srednia;
    for( uint32_t i = n; i > 0; i /= 10 )
         suma += i % 10;
   
    srednia = static_cast < double >( suma ) / static_cast < int >( log10( n ) + 1 ); //suma rzutowana na double, podzielona przez ilość cyfr
   
    cout << "Suma cyfr: " << suma << endl;
    cout << "Średnia cyfr: " << srednia << endl;
   
    return 0;
}

EDIT:
@up
Brak użycia tablicy

char * my_str =( char * ) malloc( len + 1 );
 A to jest...?
P-146874
« 1 » 2
  Strona 1 z 2 Następna strona