2016-02-15 59 views
0

我正在嘗試編寫一個程序,讀取標準輸入流查找單詞(連續字母字符),併爲每個單詞將它左旋到第一個元音(例如「朋友」旋轉到「iendfr」 )並將該序列寫出來代替原始單詞。所有其他字符都將寫入stdout中。在C元素周圍旋轉字母

到目前爲止,我已經設法扭轉了字母,但一直無法做更多。有什麼建議麼?

#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 
#define MAX_STK_SIZE 256 

char stk[MAX_STK_SIZE]; 
int tos = 0; // next available place to put char 

void push(int c) { 
    if (tos >= MAX_STK_SIZE) return; 
    stk[tos++] = c; 
} 

void putStk() { 
    while (tos >= 0) { 
     putchar(stk[--tos]); 
    } 
} 

int main (int charc, char * argv[]) { 
    int c; 
    do { 
     c = getchar(); 
     if (isalpha(c) && (c == 'a' || c == 'A' || c == 'e' || c ==   'E' || c == 'i' || c == 'o' || c == 'O' || c == 'u' || c == 'U')) { 
      push(c); 
     } else if (isalpha(c)) { 
      push(c); 
     } else { 
      putStk(); 
      putchar(c); 
     } 
    } while (c != EOF); 
} 

-Soul

+0

''else else {putStk();}之前沒有'c == EOF'的測試。 putchar(c);'需要審查。 – chux

+0

前兩個if子句都做'push()' - 所以任何字符都被推,不是元音 - 是計劃嗎? – John3136

+0

您可以使用緩衝區而不是堆棧 – BLUEPIXY

回答

2

我不會寫整個程序你,但這個例子說明如何旋轉從第一個元音一個字(如果有的話)。函數strcspn返回與傳遞的集合中的任何匹配的第一個字符的索引,如果找不到匹配項,則返回字符串的長度。

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

void vowelword(const char *word) 
{ 
    size_t len = strlen(word); 
    size_t index = strcspn(word, "aeiou"); 
    size_t i; 
    for(i = 0; i < len; i++) { 
     printf("%c", word[(index + i) % len]); 
    } 
    printf("\n"); 
} 

int main(void) 
{ 
    vowelword("friend"); 
    vowelword("vwxyz"); 
    vowelword("aeiou"); 
    return 0; 
} 

程序輸出:

iendfr 
vwxyz 
aeiou 
+0

另一種方法是'char * vowel = strpbrk(word,「aeiou」);''size_t index =元音 - 單詞;'它基本上是'6對1','十幾到另一個人。 –