2016-06-03 17 views
-2

ich mich gefragt, wie ich einen Teil einer Zeichenfolge in einem anderen kopieren, so schaute ich diese Web zu sehen, ob ich eine Antwort bekommen konnte, und ich tat: How can I copy part of another string in C, given a starting and ending indexkann nicht Teil einer Zeichenfolge kopieren

Allerdings, wenn ich diese verwenden

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

auf meinem Code, funktioniert es nicht. Warum? Ich denke, ich habe die Indexe richtig hinzugefügt.

#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 ist die Anzahl der Ziffern der Zahl, q die Position der ersten Ziffer der Zahl und h die erste Position nach der Zahl, die nicht eine Zahl ist.

Dieses Programm sollte die RPN-Matrix wie der Code sagt drucken.

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

Ich habe auch mehr Drucke hinzugefügt, um zu sehen, wo das Problem ist, und wie Sie sehen können, der zweite Druck wird nicht gedruckt, wie es sollte.

Wenn die Eingabe:

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

Was kann ich die Ausgabe zu tun, so ist:

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

Danke

+2

Bitte bearbeiten Sie Ihren Beitrag und korrigieren Sie die Einrückung. – Lundin

+0

Erfahren Sie, wie Sie einen Debugger verwenden und Zeile für Zeile durch den Code gehen. –

+0

Die Loop-Endbedingungen '<=' sind verdächtig. In der ersten geht 't' über die Länge der Saite hinaus. In der zweiten indexiert "b" ein Element von "RPN [b]", das nicht auf den aktuellen Wert von "j" gesetzt wurde, der nach der Verwendung inkrementiert wurde. –

Antwort

0

Vielleicht braucht man nur zu continue statt Inkrementieren?

#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 

Es sieht aus wie die Ausgabe, die Sie wollen. Ich habe nur eine Aussage geändert.