2017-09-13 23 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

をお試しください

このメモリはどこかに割り当てる必要があります。ポインタを使って作業することはできません。文字列の別の先頭を指すように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の最初の文字にコピーする例)

n str文字列を1文字ずつ読むことができ、非母音のみをmodified_strにコピーすることができます。 modified_strを '\ 0'で終了することを忘れないでください。

-1

私が正しく理解していれば、あなたは"shvnk""shivank"を変換し、後でそれを印刷するために別々の文字列でそれを保存したい。この

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

これはなぜより優れていますか? –

+0

文字列をチェックするときにqが表示されるためです。元のコードはqを一度印刷しますが、コードを書いた方法では、文字列をチェックするときにqを印刷する必要があります。それを試してみてください。私はそれが動作すると信じています。 – Kashif999

+0

この修正を試しましたか? –

関連する問題