2017-09-13 94 views
-1

我认为我的逻辑是正确的,但它没有打印任何东西。代码是消除字符串中的元音,然后显示它。任何人都可以用这段代码帮我吗?

#include<stdio.h> 
#include<conio.h> 
void main() 
    { 
    char *str="shivank"; 
    int i,len; 
    char *q; 
    clrscr(); 
    len=strlen(str); 
    for(i=0;i<=len;i++) 
    { 
     if((*str=='a')||(*str=='e')||(*str=='i')||(*str=='o')||(*str=='u')) 
      str++;  
     else if(*str=='\0')  
      break; 
     else 
      {  
      *q=*str; 
      str++; 
      q++; 
      } 
    } 
    *q='\0'; 
    puts(q); 
    getch(); 
    } 
+1

请阅读[为什么“有人可以帮我吗?”不是一个实际的问题?](https://meta.stackoverflow.com/q/284236/354577)[问]页面提供了提示有效问题的提示。 – Chris

+0

您需要分配q以便它指向某些内存。 – Jeffrey

+0

'void main()'错误,'main'应该返回'int'。 '','clrscr()'和'getch()'不是C语言的一部分。 C没有魔术字符串,当你访问它们时会自动增长,所以'q'不是其中的一个。始终为编译器启用最高级别的警告,并将它们视为错误。 –

回答

0

如果我理解正确的话,要转换成"shivank""shvnk",并将其存储在一个单独的字符串后进行打印。

您必须在某处分配此内存。仅仅使用指针就不能完成这项工作 - 最好的情况是,您可以将str更改为指向字符串的另一个开头:"hivank","ivank","vank"等等。都可以使用指针算术,但这是关于它。

我会建议你使用char数组而不是使用字符串常量:

char str[] = "shivank"; 
char modified_str[10]; // enough memory to store the modified string 

使用数组的好处是,你可以修改他们这样的例子:

modified_str[0] = str[0]; 

(这只是将str的第一个字母复制到第一个字母modified_str的示例)

ñ您可以逐字读取str字符串的字符,并且只将非元音复制到modified_str。不要忘记用'\ 0'结束你的modified_str

-1

试试这个

else 
     {  
     *q=*str; 
     puts(q); 
     str++; 
     q++; 
     } 
} 
*q='\0'; 
+0

为什么这更好? –

+0

因为它会在您检查字符串时打印q。您的原始代码打印一次,而您编写代码的方式则需要在检查字符串时打印q。尝试一下。我相信它会起作用。 – Kashif999

+0

您是否尝试过此修改? –

相关问题