2014-02-15 119 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