我正在尝试某些事情......我无法理解结果
#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;
}
我想向前移动每个值,并用空指针替换元音字符。但该计划无效。请告诉我哪里出错了,为什么我出错了。
答案 0 :(得分:2)
expression(a^{*})
与\o
不同。 \0
将被视为\o
。 Reference
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'
时,我决定将此转义字符完全排除在函数之外。:)