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

您是否嘗試過此修改? –

相關問題