2014-02-15 163 views
0

我嘗試在字符串上運行反轉但它不適用於我。保存字符串反向

例如我想: -
運行到字母Z在str並存儲所有來自於一個新的字符串str1ZA之間的信件。

我的代碼:

int main() 
{ 
    char str[8] = "RREADFZ"; 
    char str1[8]; 
    int i,k; 

    for(i =0; i<8; i++) 
    { 
     if(str[i] == 'Z') 
     { 
       while(str1[k] != 'A') 
       { 
         str1[k] = str[i]; 
         i--; 
         k--; 
       } 
     } 
    } 
    printf("%s\n",str1); 
} 
+1

你想_decrement_'k'或_increment_呢? – devnull

+0

你是否忘記了字符串末尾的空字符? –

+0

@devnull我不會減少k – user3313154

回答

2

需要初始化k0並在while循環加一; k++。最後,您需要在陣列str1中存儲\0

0
#include <stdio.h> 
#include <string.h> 

int main(){ 
    char str[8] = "RREADFZ"; 
    char str1[8] = {0}; 
    int i, k, aPos, zPos, len = strlen(str); 

    aPos = zPos = -1; 
    for(i =0; i<len; i++){ 
     if(str[i] == 'A'){ 
      aPos = i; 
     } else if(str[i] == 'Z'){ 
      zPos = i; 
      break; 
     } 
    } 
    if(aPos != -1 && zPos != -1){ 
     for(k=0, i=zPos-1;i>aPos;--i,++k){ 
      str1[k]=str[i]; 
     } 
    } 
    printf("%s\n", str1);//FD 
    return 0; 
} 

UPDATE(定義函數)

#include <stdio.h> 
#include <string.h> 

void between(char out[], const char in[], char front, char back){ 
    int i, k, frontPos, backPos, len = strlen(in); 
    frontPos = backPos = -1; 
    for(i =0; i<len; i++){ 
     if(in[i] == front){ 
      frontPos = i; 
     } else if(in[i] == back){ 
      backPos = i; 
      break; 
     } 
    } 
    k = 0; 
    if(frontPos != -1 && backPos != -1){ 
     for(i=backPos-1;i>frontPos;--i,++k){ 
      out[k]=in[i]; 
     } 
    } 
    out[k]='\0'; 
} 

int main(){ 
    char str[] = "RREADFZ"; 
    char exp[] = "2-3 +5 * 7"; 
    char cutout[16]; 

    between(cutout, str, 'A', 'Z'); 
    printf("str:%s\n", cutout);//FD 
    between(cutout, exp, '+', '*'); 
    printf("exp:%s\n", cutout);// 5 

    return 0; 
} 
+0

同樣的方法也可以使用數字嗎? – user3313154

+0

@ user3313154我認爲是相同的方式,並且是有效的。 – BLUEPIXY

+0

出於某種原因,它不適合我用這個練習的數字:2-3 +5 * 7程序運行並保持乘法符號並返回加號。沒有工作,你可能需要改變比他更多? – user3313154