2017-09-26 44 views
-1

因此,我正在嘗試爲學校製作遊戲,但無法使其工作。 其中一個元素應該是輸出字符串在每個輔音前面都有字符'ay'。 我現在使用的代碼非常接近,但我不知道了。我應該可以輸入任何隨機字符串,並將其轉換爲帶有ay的字符串,並以輔音開頭。 當我把字符串中的一個例子:「我喜歡寫C代碼」 輸出應該變成:「我aylike aywriting AYC aycode」如何在單詞之前插入2chars

char insertChar(char str[]) 
{ 
    int k; 
    k = 0; 


    for (str[k] != '\0'; k < strlen(str); k++) 
    { 
     if(str[k] = ' ' && str[k] != 'a' || str[k] != 'e' || str[k] != 'i' || str[k] != 'o' || str[k] != 'u' || str[k] != 'A' || str[k] != 'E' || str[k] != 'I' || str[k] != 'O' || str[k] != 'U') 
     { 
      putchar('a'); 
      putchar('y'); 
     } 
     else 
     { 
      putchar(str[k]); 
     } 
     k++; 
    } 
} 



void main(void) 
{ 
    printf("** Welcome to the Double Dutch game **\n"); 
    printf("Please enter a string: "); 
    scanf("%[^\n]s", myString); 
    insertChar(myString); 
    printf("Double Dutch translation: "); 

    printf("\n"); 
} 
+1

關於'if'條件:請注意,'='是C中的賦值運算符,不是比較運算符。 –

+0

請提供示例輸入輸出,並且明確狀態與當前狀態下的代碼錯誤 – Tyler

+1

任何C類應該教給您的前兩件事:1.編譯時啓用所有警告2.不要忽略警告。 – Max

回答

0

你需要使用的,而不是and一個or操作。此外,您錯誤地增加了兩次k。請參見下面的工作片段:

for (; k < strlen(str); k++) 
{ 
if(str[k] != 'a' && str[k] != 'e' && str[k] != 'i' && str[k] != 'o' && str[k] != 'u' && str[k] != 'A' && str[k] != 'E' && str[k] != 'I' && str[k] != 'O' && str[k] != 'U') 
{ 
    putchar('a'); 
    putchar('y'); 
    putchar(str[k]); 
} 
    else 
    { 
     putchar(str[k]); 
    } 
} 
} 
+0

@JurjenKuijstermans,不,它按預期工作。我只是自己跑它,它產生了所需的輸出。 – VHS

+0

您無需更正就複製錯誤代碼 –

+0

用'k = 0'代替'for'語句中的'str [k]!='\ 0'' –

0

我相信下面的是一個正確的版本:

void *insertChar(char *str) 
{ 
    int i= 0; 

    while (str[i]) 
    { 
    putchar(str[i]); 
    if (str[i] == ' ' && !strchr("AEIOUYaeiouy", str[i+1])) 
    { 
     putchar('a'); 
     putchar('y'); 
    } 
    i++; 
    } 
} 
+0

不要相信自己。:) –

+0

@VladfromMoscow,正確...更多的錯誤。必須添加一個'!' –

0

下面是令牌化字的另一種方法。工作實例 - https://ideone.com/GKwEL5

void insertChar(char str[]) 
{ 
    int space = 0; 

    char *word; 
    word = strtok (str, " "); 

    while (word != NULL) 
    { 
    if(space) 
     putchar(' '); 
    space = 1; 

    if(!strchr("aeiouAEIOU", word[0])) 
    { 
     putchar('a'); 
     putchar('y'); 
    } 

    printf ("%s", word); 

    word = strtok (NULL, " "); 
    } 
} 
0

看來你需要建立使用從源字符串前綴一個新的字符串。在這種情況下,你必須在函數內動態分配一個新的字符數組。

如果是這樣,那麼該功能可以按照演示程序中顯示的以下方式進行查看。

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

char * double_dutch_translation(const char *s) 
{ 
    const char *vowels = "AEIOUaeiou"; 
    const char *prefix= "ay"; 

    size_t n = 0; 
    size_t len = 0; 

    for (; s[len] != '\0'; len++) 
    { 
     if (strchr(vowels, s[len]) == NULL && 
      (len == 0 || isblank((unsigned char)s[len-1]))) 
     { 
      ++n; 
     } 
    } 

    char *result = malloc(len + 1 + 2 * n); 

    if (result != NULL) 
    { 
     size_t i = 0, j = 0; 

     do 
     { 
      if (strchr(vowels, s[i]) == NULL && 
       (i == 0 || isblank((unsigned char)s[i-1]))) 
      { 
       result[j++] = prefix[0]; 
       result[j++] = prefix[1]; 
      } 

      result[j++] = s[i]; 
     } while (s[i++] != '\0'); 
    } 

    return result; 
} 

int main(void) 
{ 
    char s1[] = "I like writing C code"; 
    char s2[] = "He doesn't like writing C code"; 

    char *p = double_dutch_translation(s1); 

    if (p) 
    { 
     printf("\"%s\"\n", s1); 
     printf("Double Dutch translation: \"%s\"\n", p); 
     free(p); 
    } 

    p = double_dutch_translation(s2); 

    if (p) 
    { 
     printf("\"%s\"\n", s2); 
     printf("Double Dutch translation: \"%s\"\n", p); 
     free(p); 
    } 

    return 0; 
} 

它的輸出是

"I like writing C code" 
Double Dutch translation: "I aylike aywriting ayC aycode" 
"He doesn't like writing C code" 
Double Dutch translation: "ayHe aydoesn't aylike aywriting ayC aycode" 

注重與未前面有一個空白的字母「H」開頭字符串s2

相關問題