保存字符串反转

时间:2014-02-15 16:13:28

标签: c string

我尝试在字符串上运行反向但它对我不起作用。

例如我试过: - 在str中运行到字母Z,并将字母ZA之间的所有字母存储在新字符串str1上。

我的代码:

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);
}

2 个答案:

答案 0 :(得分:2)

您需要将k初始化为0并在while循环中将其递增; k++。最后,您需要将\0存储在数组str1中。

答案 1 :(得分: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;
}

更新(定义功能)

#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;
}