Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Interschimbarea a 2 string-uri :D  (Citit de 1118 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« : Martie 22, 2009, 14:34:30 »

Intr-un program putin mai complex am urmatoarea secventa:
Cod:
//.... a,b- 2 stringuri care contin doar cifre
//aux -string
strrev(a); strrev(b);
if(strlen(a)<strlen(b)||strcmp(a,b)<0)
  {
     strcpy(aux,a);
     strcpy(a,b);
      strcpy(b,aux);
}
puts(a); puts(b);
Dupa executarea acestei secvente imi afiseaza pe o linie nimic si pe alta numarul b.
De ce imi afiseaza in loc de a , nimic ??
ps: Am facut un debug si dupa ce se termina strcpy(b,aux) a devine null, de ce? 
[later] Problema am rezolvat-o si fara secventa aceasta, dar totusi de ce se intrampla ca a sa devina NULL?
Am rezolvat Numarul lui Stirling de speta a 2, folosind numere marii.
Cod:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void aduna(char *a,char *b,char *suma)
   {strrev(a); strrev(b);
    memset(suma,0,sizeof(suma));
    int i,t=0,min=strlen(a)<strlen(b)?strlen(a):strlen(b);
    for(i=0;i<min;++i)
       {
suma[i]=((a[i]-'0')+(b[i]-'0')+t)%10+'0';
t=((a[i]-'0')+(b[i]-'0'))/10;
       }
    while(i<strlen(a))
{
  suma[i]=((a[i]-'0')+t)%10+'0';
  t=((a[i]-'0')+t)/10;
  ++i;
}
    while(i<strlen(b))
{
  suma[i]=((b[i]-'0')+t)%10+'0';
  t=((b[i]-'0')+t)/10;
  ++i;
  }
    if(t) suma[i]=t+'0',++i;
    strrev(a); strrev(b); strrev(suma);
   }
void inmultire(char *a,char *b,char *produs)
   {
    strrev(a); strrev(b);
    memset(produs,0,sizeof(produs));
    int j,i,t;
    char d[1000],d1[1000],p[1000];
    for(i=0;i<strlen(b);++i)
       {memset(d,0,sizeof(d));
memset(d1,'0',sizeof(d1));
for(t=j=0;j<strlen(a);++j)
   {
    d[j]=((a[j]-'0')*(b[i]-'0')+t)%10+'0';
    t=((a[j]-'0')*(b[i]-'0'))/10;
   }
if(t) d[j]=t+'0';
if(i==0) strcpy(produs,d);
  else {strcpy(d1+i,d);
strrev(produs); strrev(d1);
aduna(produs,d1,p); strrev(p);
strcpy(produs,p);
       }
       }
   strrev(a); strrev(b); strrev(produs);
   }
char *s[201][201],numar[1000],suma[1000],produs[1000];
int main()
  {
   int n,k,i,j;
    //freopen("decor.in","rt",stdin);
   //freopen("decor.out","wt",stdout);
   scanf("%d %d",&n,&k);
   for(i=0;i<=n+1;++i)
   for(j=0;j<=n+1;++j) s[i][j]=new char[201],memset(s[i][j],0,sizeof(s[i][j])); //mai exista si alta metoda de a aloca o matrice de
//200X200X200??
   for(i=1;i<=n;++i) s[i][1][0]=s[i][i][0]='1';
    for(i=3;i<=n;++i)
      for(j=2;j<i;++j)
{
  ltoa(j,numar,10);
  inmultire(s[i-1][j],numar,produs);
  aduna(produs,s[i-1][j-1],s[i][j]);
}
   puts(s[n][k]);
   system("PAUSE>NULL");
   return 0;
  }
Pentru numere mici  merge, dar cand vine vorba de S(100,35) crapa, de ce??  Confused
[later] Am gasit de ce nu merge, nu se aloca  memorie, dar cum o aloc ca sa mearga?? Am incercat malloc, calloc,new,farcalloc ...is disperat !!!
« Ultima modificare: Martie 23, 2009, 19:06:38 de către alexandru » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines