交换char指针的值

时间:2015-04-23 14:30:11

标签: c string pointers char

我正在尝试某些事情......我无法理解结果

#include<stdio.h>
#include<conio.h>

char *remove_vowels_string(char *p);

void main()
{
    clrscr();
    char str[77],*getString;
    gets(str);
    getString=remove_vowels_string(str);
    puts("\n");
    puts(getString);
    getch();
}

char *remove_vowels_string(char *p)
{
    char *q;
    q=p;
    while(*p)
    {
        if(*p=='a' || *p=='e' || *p=='i' || *p=='o' || *p=='u')
        {
            for(int i=0;*(p+i)!='\o';i++)
            // printf(" as %d",i);
            {
                 *q=*(p+i);
                 *(p+i)=*(p+i+1);
                if(*(p+i+1)=='\o')
                    break;

                    *(p+i+1)=*q;
            }

            printf("\n%c\n",*p);
            *(p+i+1)='\o';
        }
        p++;
    }
    puts(p);
    return p;
}

我想向前移动每个值,并用空指针替换元音字符。但该计划无效。请告诉我哪里出错了,为什么我出错了。

2 个答案:

答案 0 :(得分:2)

expression(a^{*}) \o不同。 \0将被视为\oReference

o

应该是

 for(int i=0;*(p+i)!='\o';i++)

类似地,

 for(int i=0;*(p+i)!='\0';i++)
                       ^
                     This is the null character

应该是

if(*(p+i+1)=='\o')

if(*(p+i+1)=='\0')

应该是

*(p+i+1)='\o';

另请注意,您应该使用

*(p+i+1)='\0';

而不是int main() { // your code return 0; }

答案 1 :(得分:0)

捕捉! :)

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


char * remove_vowels( char *s ) 
{
    const char *vowels = "aeiou";

    char *q = s; 

    while ( *q && !strchr( vowels, tolower( *q ) ) ) ++q; 

    char *p = q; 

    while ( *q ) 
    { 
        if ( !*++q || !strchr( vowels, tolower( *q ) ) ) *p++ = *q; 
    } 

    return s; 
 } 

int main( void ) 
{
    char s[] = "abcdefghijklmnopqrstuvwxyz";

    puts( s );
    puts( remove_vowels( s ) );

    return 0;
}

程序输出

abcdefghijklmnopqrstuvwxyz
bcdfghjklmnpqrstvwxyz

当您输入拼写错误并写'\o'而不是'\0'时,我决定将此转义字符完全排除在函数之外。:)