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

[C]Łańcuchy znaków

Ostatnio zmodyfikowano 2015-12-21 16:33
Autor Wiadomość
szawel
Temat założony przez niniejszego użytkownika
[C]Łańcuchy znaków
» 2015-12-21 15:30:40
Mam takie zadanie.

.

 
C/C++
#include <stdio.h>
#include <string.h>
#include <cstdlib>

int czy_liczba_calkowita( char arg[] )
{
    char * ptr;
    strtol( arg, & ptr, 10 );
    return !* ptr;
}
int jaka_liczba( char arg[] )
{
    return czy_liczba_calkowita( arg ) ? strtol( arg, NULL, 10 )
        : 0;
}

int main() {
   
    char txt[ 100 ];
    gets( txt );
   
    int a = jaka_liczba( char txt[ 100 ] );
   
    printf( "%s", a );
   
    system( "pause" );
}

Napisałem taki kod, ale wiem, że jest zły. Nie wiem jak go poprawić, jestem początkującym. Prosze o pomoc.
P-142212
mateczek
w c++
» 2015-12-21 15:41:08
C/C++
#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main() {
    //jak chcesz wczytać liczbę ze strumienia   
    int i;
    cin >> i;
    //jak chcesz wczytać napis ze ztrumienia  
    string s;
    cin >> s;
    i = stoi( s );
   
   
    //lub inaczej
    stringstream ss;
    ss << s; //napis do strumienia
    ss >> i; //wrzuć napis pobierz liczbę
}
P-142214
szawel
Temat założony przez niniejszego użytkownika
» 2015-12-21 16:00:35
Przepraszam, ale troche nie za bardzo rozumiem jak to się odnosi do tego zadania. Treść mówi, że mają być użyte funkcje, które raczej są napisane dobrze. Nie wiem jednak jak je dobrze wywołać.
P-142215
carlosmay
» 2015-12-21 16:07:21
int a = jaka_liczba( char txt[ 100 ] );
 niepoprawne argumenty w wywołaniu funkcji.
C/C++
int a = jaka_liczba( txt, 100 );

// funkcja
int jaka_liczba( char arg[], int rozmiar ) { }
P-142216
mateczek
» 2015-12-21 16:08:11
masz 3 sposoby na wczytanie liczby z klawiatury:

sposób 1 bezpośrednio:
C/C++
int main() {
    //jak chcesz wczytać liczbę ze strumienia   
    int i;
    cin >> i;
    i = i * 2; //możesz wykonywać operacje matematyczne
}

Sposób 2 To najpierw wczytujesz napis i można to zrobić tak
C/C++
int main() {
    string s;
    cin >> s;
    int i = stoi( s );
    i = i * 2; //możesz wykonywać operacje matematyczne

lub tak najpierw napis ze strumienia klawiatury wrzucić do tymczasowego strumienia i wyjąć liczbę (dwa razy niepotrzebna robota)
C/C++
int main() {
    string s;
    cin >> s;
    stringstream ss;
    ss << s; //napis do strumienia
    ss >> i; //wrzuć napis pobierz liczbę
    i = i * 2; //możesz wykonywać operacje matematyczne
P-142217
szawel
Temat założony przez niniejszego użytkownika
» 2015-12-21 16:17:39
Poprawiłem to w ten sposób.
C/C++
#include <stdio.h>
#include <string.h>
#include <cstdlib>

int czy_liczba_calkowita( char arg[] )
{
    char * ptr;
    strtol( arg, & ptr, 10 );
    return !* ptr;
}
int jaka_liczba( char arg[], int rozmiar )
{
    return czy_liczba_calkowita( arg ) ? strtol( arg, NULL, 10 )
        : 0;
}

int main() {
   
    char txt[ 100 ];
    gets( txt );
   
    int a = jaka_liczba( txt, 100 );
   
    printf( "%s", a );
   
    system( "pause" );
}

Prawidlowo wyswietla zero, ale nie wyswietla liczb tak jak powinno.
P-142218
carlosmay
» 2015-12-21 16:25:47
Z tym rozmiarem trochę poleciałem. Dla łańcucha 'char' jest zbędny jeśli nie iterujesz po całej tablicy.
Poza tym strtol() w przypadku liczby na początku łańcucha i znakami innymi dalej lub pomiędzy skonwertuje liczbę z początku, a resztę pozostawi.
P-142219
Kaikso
» 2015-12-21 16:33:05
Od kiedy to C jest obiektowe miało być w C a nie C++.

C/C++
#include <stdio.h>

#define czy_cyfra( c )    (( c ) > '0' && ( c ) < '9' )
#define jaka_cyfra( c )   (( c ) - '0' )

int czy_liczba_calkowita( char * str )
{
    // return 0;  // łańcuch jest liczbą całkowitą
    // return -1; // łańcuch nie jest liczboł całkowitą
   
    if( * str == '\0' )
         return - 1; // gdy łańcuch jest pusty
   
    do
    {
        if( !czy_cyfra( * str ) )
             return - 1; // jeśli znak nie jest cyfrą
       
    } while( *++str != '\0' );
   
    return 0;
}

unsigned jaka_liczba( char * str )
{
    unsigned liczba = 0;
   
    do
    {
        liczba = liczba * 10 + jaka_cyfra( * str++ );
    } while( * str != '\0' );
   
    return liczba;
}

int main()
{
    char str[ 255 ];
   
    scanf( "%s", str );
    printf( "%u", czy_liczba_calkowita( str ) == 0 ? jaka_liczba( str )
        : 0 );
   
    return 0;
}
P-142221
« 1 »
  Strona 1 z 1