我正在尝试永久更改字符串,但是此代码没有执行此操作

问题描述 投票:0回答:1
    #include<stdio.h>
    #include<conio.h> //**Just To Add getch() function**
    int length(char *p){
        int i; //**I know That these variable are not the same as they are in other function**
        for(i=0;*(p+i)!='\0';i++);
        return i;
    }
    void strrev(char *p){
        int i,len;
        len=length(p);    
        char cpy[len]; //**Already Tried to change it to some fixed value**
        for(i=0;i<len;i++){
            cpy[i]=*(p+len-i);
        }
        for(i=0;i<len;i++){
            *(p+i)=cpy[i];
        }
    }
    int main(){
        char str[20]="computer";
        strrev(str);
        printf("%s",str);
        getch(); //**to Stop The Screen**
        return 0;
    }

我曾尝试将数组大小更改为固定值,我也尝试过更改变量,但语法没有错误。

c string function reverse
1个回答
0
投票

根据@Yunnosch的推荐,这是我的评论作为答复。

在函数strrev中,您遍历了整个字符串,即i的迭代从零到len / 2,您正确地抓住了字符,但是其余的迭代只是再次撤消了此操作。

因此,只需从零迭代到len >> 1。移位确保整数除法。

void strrev(char* const str)
{
   const std::size_t len = strlen(str);
   for(std::size_t i = 0; i < (len >> 1u); ++i)
   {
     const std::size_t j = len - 1u - i;
     char c = str[i];
     str[i] = str[j];
     str[j] = c;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.