2016-06-03 4 views
-2

Je me demandais comment je peux copier une partie d'une chaîne à l'autre, donc j'ai vérifié ce Web pour voir si je pouvais obtenir une réponse, et je l'ai: How can I copy part of another string in C, given a starting and ending indexImpossible de copier une partie d'une chaîne

Cependant, quand j'utilise cette

strncpy(dest, src + beginIndex, endIndex - beginIndex); 

sur mon code, cela ne fonctionne pas. Pourquoi? Je pense que j'ai ajouté les index correctement.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <math.h> 
#define MAX 15 

int main() 
{ 
    int j=0; 
    int i; 
    char RPNarray[MAX]; 
    printf("Enter the RPN"); 
    fgets(RPNarray,MAX,stdin); 
    int t=strlen(RPNarray); 
    double RPN[t][2]; 

    for(i=0;i<=t;i++) 
    { 
     if(isspace(RPNarray[i])) 
     { 
      i=i+1; 
     } 
     else if (isdigit(RPNarray[i])) 
     { 
      int q,h; 
      q=i; 
      for (h=i;isdigit(RPNarray[h]);h++) 
      { 
       h=h+1; 
      } 
      int r; 
      double u; 
      r=h-q; 
      char number[r]; 
      printf("%s ", RPNarray); 
      strncpy(number,RPNarray + q,h - q); 
      printf ("%s\n",number); 
      u=atof(number); 
      printf("%lf.\n",u); 
      RPN[j][0]=0; 
      RPN[j][1]=u; 
      i=i+1; 
      j=j+1; 
     } 
    } 
    int b; 
    for (b=0;b<=j;b++) 
    { 
     printf("%lf %lf \n",RPN[b][0],RPN[b][1]); 
    } 
} 

r est le nombre de chiffres du numéro, q la position du premier chiffre du nombre et h la première position après que le nombre qui ne soit pas un nombre.

Ce programme devrait imprimer la matrice RPN comme le code l'indique.

(0,(first number we introduce via stdin) 
(0,(second number we introduce via stdin) 
(0,(third number we introduce via stdin) 

J'ai également ajouté plus d'impressions pour voir où est le problème, et comme vous pouvez le voir, la deuxième impression n'est pas imprimé comme il se doit.

Si l'entrée est:

56 6 
The output is: 
56 6 
56OT? 
56.000000. 
vector 0.000000 56.000000 
vector 0.000000 0.000000 

Que puis-je faire la sortie est:

56 6 
56 
56.000000. 
56 6 
6 
6.000000. 
vector 0.000000 56.000000 
vector 0.000000 6.000000 

Merci

+2

Veuillez modifier votre message et corriger l'indentation. – Lundin

+0

Apprenez à utiliser un débogueur et parcourez le code ligne par ligne. –

+0

Les conditions de fin de boucle '<=' sont suspectes. Dans le premier 't' passe la longueur de la chaîne. Dans le second 'b' est l'indexation d'un élément de' RPN [b] 'qui n'a pas été défini à la valeur actuelle de' j', qui a été incrémentée après son utilisation. –

Répondre

0

Peut-être vous juste besoin de continue au lieu de incrémenter?

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <math.h> 

#define MAX 15 

int main() { 

    int j = 0; 
    int i; 
    char RPNarray[MAX]; 
    printf("Enter the RPN"); 
    fgets(RPNarray, MAX, stdin); 
    int t = strlen(RPNarray); 
    double RPN[t][2]; 

    for (i = 0; i <= t; i++) { 
     if (isspace(RPNarray[i])) { 
      continue;//i = i + 1; 
     } 
     else if (isdigit(RPNarray[i])) { 
      int q, h; 
      q = i; 
      for (h = i; isdigit(RPNarray[h]); h++) { 
       h = h + 1; 
      } 
      int r; 
      double u; 
      r = h - q; 
      char number[r]; 
      printf("%s ", RPNarray); 
      strncpy(number, RPNarray + q, h - q); 
      printf("%s\n", number); 
      u = atof(number); 
      printf("%lf.\n", u); 
      RPN[j][0] = 0; 
      RPN[j][1] = u; 
      i = i + 1; 
      j = j + 1; 
     } 
    } 
    int b; 
    for (b = 0; b <= j; b++) { 
     printf("%lf %lf \n", RPN[b][0], RPN[b][1]); 
    } 
} 

test

Debug/gnu 
Enter the RPN56 6 
56 6 
56 
56.000000. 
56 6 
6 

6.000000. 
0.000000 56.000000 
0.000000 6.000000 
0.000000 0.000000 

Il ressemble à la sortie que vous voulez. Tout ce que j'ai fait était de changer une déclaration.