2015-03-24 22 views
-2
void getAvailableLetters(char lettersGuessed[], char availableLetters[])  

是我需要創建的函數。它必須使用字符串。如何把字母從字符串? C語言

  • availableLetters是英文字母
  • lettersGuessed是由用戶插入字母

  • 功能應該這樣做:

可用字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
給我的一封信: (讓我們猜'米')
可用的字母:abcdefghijklnopq rstuvwxyz //所有沒有字母m
給我的一封信:(讓我們赫斯 'B')
可用字母:acdefghijklnopqrstuvwxyz //所有沒有使用m & b

任何algorythms,建議,代碼或不便你會幫我這樣做會很棒。

+0

我還沒有這樣做,請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問什麼主題?這裏?「](http://stackoverflow.com/help/on-topic)和[」我應該避免問什麼類型的問題?「](http://stackoverflow.com/help/dont-ask)。另請[請閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。您可能還想了解如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – 2015-03-24 23:17:27

+0

無論您使用哪種語言,如果lettersGuessed和availableLetters都是字符串,則必須有一個替換方法來擺脫您需要從字母表中移除的字母。 – RobertoNovelo 2015-03-24 23:25:57

+0

@RobertoNovelo你確定'C'有一個字符串替換「方法」嗎?我嚴重懷疑這一點。 – jvitasek 2015-03-25 00:07:51

回答

0

測試這一個。函數char_replace()接收源字符串,要查找的字符以及替換字符的字符串(也可以是一個字符)。在你的情況,你通過""(空值)的字符被替換,因爲你想刪除它。但是這個參數可能派上用場,所以我把它加入了。

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

char *char_replace(char *, char, char *); 

int main(void) { 
    char input[4096] = "abcdefghijklmnopqrstuvwxyz"; 
    char *signature = char_replace(input, 'a', ""); 
    printf("%s\n", input); 

    return 0; 
} 

char *char_replace(char *str, char find, char *replace) { 
    char *ret=str; 
    char *wk, *s; 
    // string duplication 
    wk = s = strdup(str); 

    while (*s != 0) { 
     if (*s == find){ 
      while(*replace) 
       *str++ = *replace++; 
      ++s; 
     } else 
      *str++ = *s++; 
    } 
    *str = '\0'; 
    free(wk); 
    // returning the result string 
    return ret; 
} 

這種方法是計數input陣列的字符(串)上有足夠的空間分配給它4096。

+0

這一個不工作,char *簽名是未使用的值,並且char *替換被聲明爲錯誤 – Bobrys 2015-03-25 05:39:31

+0

@Bobrys它正在工作(只用'gcc filename.c -o filename'編譯。這是一個非常棒的解決方案,但是它應該讓你走到你需要去的地方,我們不是免費的代碼編寫社區,你應該完成這項工作,這只是一個暗示。 – jvitasek 2015-03-25 09:05:38

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

char availableLetters[27]={"abcdefghijklmnopqrstuvwxyz"},lettersGuessed[2]; 

void getAvailableLetters(char lettersGuessed[], char availableLetters[]) 

{ 

int i,flag=0; 

for(i=0;availableLetters[i]!='\0';i++) 

{ 

if(availableLetters[i]==lettersGuessed[0]) 

{ 

flag=1; 

for(;availableLetters[i]!='\0';i++) 

{ 

availableLetters[i]=availableLetters[i+1]; 


} 

} 

if(flag==1) 

{ 

availableLetters[i-1]='\0'; 

break; 

} 

} 

} 

input() 

{ 

printf("Gimme a letter:"); 

scanf("%c",&lettersGuessed[0]); 

fflush(stdin); //deleting extra characters 

lettersGuessed[1]='\0'; 

} 

output() 

{ 

printf("Available letters:"); 

puts(availableLetters); 

} 

main() 

{ 

output(); 

input(); 

getAvailableLetters(lettersGuessed,availableLetters); 

output(); 

input(); 

getAvailableLetters(lettersGuessed,availableLetters); 

output(); 
}