1 / 3
Sep 2014

Witam
Jakis czas temu zaczalem swoja przygode z C++
Obecnie stoje przed problemem napisania funkcji zamieniajacej (jak w tytule) inta na stringa
program sie kompiluje tylko wypisuje na ekranie pusta linie
Prosze o pomoc, sugestie itd
Pozdrawiam

#include <iostream>
using namespace std;
int main()
{
    int i,j=0,o;
    cin>>i;
    char a[50];
    o=i;
    while(o>0)
    {
        o/=10;
        j++;
    }
    for(int m=0;m<j;m++)
    {
        a[j-m-1]=i%10;
        i=i/10;
    }
    cout<<a<<endl;
    return 0;
}
  • created

    Sep '14
  • last reply

    Sep '14
  • 2

    replies

  • 854

    views

  • 3

    users

Musisz pamiętać, że cyfry w kodzie ASCII nie mają wartości od 0 do 9. Wpisując do tablicy wartości z przedziału 0 - 9, wpisujesz tam znaki specjalne, które nie mają postaci graficznej. Kody cyfr to:
'0' - 48
'1' - 49
'2' - 50
itd.

Druga sprawa, to tworząc stringa, musisz za ostatnim znakiem wpisać 0 (wartość zero, nie znak '0').

Czyli:
[bbone=CPP,1791]

include

using namespace std;

int main()
{
int i,j=0,o;
cin>>i;
char a[50];
o=i;
while(o>0)
{
o/=10;
j++;
}
for(int m=0;m {
a[j-m-1]=i%10 + 48;
i=i/10;
}
a[j] = 0;
cout< return 0;
}
[/bbone]

A trzecia rzecz, to ten temat powinien być w innym dziale.

Można to zrobić, konwersję z int na string, na wiele sposobów i będzie działało lepiej czy gorzej. Jednak czy nie lepiej to zrobić najlepiej jak można, lub w sposób zbliżony do tego jak robią do zawodowcy, mistrzowie? Sposób przedstawiony w poście powyżej oczywiście działa dla n>0 i autor słusznie zwrócił uwagę na błędy pytającego ale jego program nie podoba mi się, jest nie czytelny, bufor [50] na konwersję inta [10 znaków + sign + \0] jest dużo za duży, co z konwersją 0 i co ze znakiem dla liczb ujemnych?
Wystarczy/ło tylko poszperać i poszukać.
Najlepsza, najstarsza, książka jaką znam, do c, jest też dla c++ bardzo dobrym [najlepszym] rozkowiązaniem.
Jest to niezastąpiona: Kernighan and Ritchie's Język C ... lib.h/itoa](http://en.wikibooks.org/wiki/C_Programming/C_Reference/stdlib.h/itoa)
Tam, sposób K&&R, wykorzystuje na końcu dodatkowo funkcję odwracającą string - funkcję reverse.

Poniżej jedna z moich propozycji, bez reverse, bez komentarzy i wyjaśnień [możliwe że też nieczytelna i zagmatwana] z wykorzystaniem wskaźnika. Zobacz-kliknij show submissions a potem more:
[bbone=cpp,1796]

include

using namespace std;

int main() {
char *ip, liczbaAsci[12] = {0}; //mozna tak = {0}
liczbaAsci[11] = 0; // lub wystarczy tylko wyzerowac ostatni element, tu -> [11]=0
int liczba, sign;
while(cin >> liczba){
ip = &liczbaAsci[11];
if(liczba >= 0)
sign = 0;
else {
sign = 1;
liczba = -liczba;
}
do{
*--ip = liczba % 10 + '0';
liczba /= 10;
} while(liczba > 0);
if(sign) *--ip = '-';
cout << ip << endl;
}
return 0;
}
[/bbone]
Oczywiście, należałoby zapisać to jako funkcję, ale to już homework.