c
  • pointers
  • 2015-05-23 30 views 3 likes 
    3
    #include<conio.h>   
    #include<stdio.h>  
    
    int main(void)  
    {  
        char str[20];  
        char *ptr1,*ptr2;  
        printf("Enter string\n");  
        gets(str);  
        ptr1,ptr2=&str[0];  
        while(*ptr2!='\0')     
        {  
         ptr2++;  
        }  
        ptr2--;  
        printf("rev_string =");  
        while(ptr1!=ptr2) //this should work for when strlen=odd integer 
        {  
         int temp=*ptr2;  
         *ptr2=*ptr1;  
         *ptr1=temp;  
         ptr1++;  
         ptr2--;  
        }  
        puts(str);  
        return 0;  
    } 
    

    什么错我的代码?我知道我已经投入了while循环condtion是不是要去工作时的字符串的长度是偶数,但它扭转一个字符串就地应该适用于奇怪的情况。尝试使用两个指针

    回答

    4

    似乎有一个错字

    '#include<conio.h>   
    ^^ 
    

    C标准不支持任何更多的功能gets。相反,你应该使用标准功能fgets

    这种情况

    while(ptr1!=ptr2) 
    

    是错误的,有偶数个字符的字符串,因为这将是永远等于假,循环将是无限的。

    下面的语句也是错误的

    ptr1,ptr2=&str[0];  
    

    这里使用逗号运算符和PTR1未初始化。

    我想你的意思

    ptr1 = ptr2 = &str[0];  
    

    程序可以写成下面的方式

    #include<stdio.h>  
    
    int main(void)  
    {  
        char str[20];  
        char *ptr1,*ptr2; 
    
        printf("Enter a string: ");  
        fgets(str, sizeof(str), stdin); 
    
        ptr2 = str; 
    
        while (*ptr2 != '\0') ++ptr2;     
    
        if (ptr2 != str && *(ptr2 - 1) == '\n') *--ptr2 = '\0'; 
    
        printf("rev_string = ");  
    
        ptr1 = str; 
    
        if (ptr1 != ptr2) 
        { 
         for (; ptr1 < --ptr2; ++ptr1) 
         {  
          int temp = *ptr2;  
          *ptr2 = *ptr1;  
          *ptr1 = temp; 
         }  
        } 
    
        puts(str); 
    
        return 0;  
    } 
    
    +1

    是的,我已经提到,条件(PTR1!= PTR2)不是连长度会工作字符串,但它应该适用于奇数,只是想知道为什么它也不适用于奇数长度。 –

    +1

    @Peince Vijay Pratap查看我更新的帖子。 –

    +1

    你能告诉我为什么你这样做吗? if(ptr2!= str && *(ptr2 - 1)=='\ n')* - ptr2 ='\ 0'; –

    相关问题