在學校任務中,我們被要求從字符串中刪除每個元音的出現。如何擦除字符串中每個元音的出現
所以說: 「男孩把球踢」會導致 「號由kckd日BLL」
每當一個元音被發現,所有的後續字符以某種方式有左移,或者至少這是我的做法。因爲我剛剛開始學習C,很可能這是一種荒謬的方法。
我想要做的是:當我點擊第一個元音時,我將下一個字符([i + 1])「轉移」到當前位置(i)。那麼對於每個後續字符都必須繼續移位,所以int startshift被設置爲1,所以第一個if塊在每次後續迭代中都會執行。
第一個if塊還測試以查看下一個字符是否爲元音。沒有這樣的測試,元音前面的任何字符都會「變換」到相鄰的元音,並且除第一個元音之外的每個元音仍然存在。然而,這導致每個元音被前面的char替代,因此if if塊被替換。
無論如何,這個醜陋的代碼是我到目前爲止提出的。 (用於字符*指針是沒有意義的名字(我只是不知道該怎麼稱呼他們),並具有兩組人可能是redudant。
char line[70];
char *blank;
char *hlp;
char *blanktwo;
char *hlptwo;
strcpy(line, temp->data);
int i = 0;
int j;
while (line[i] != '\n') {
if (startshift && !isvowel(line[i+1])) { // need a test for [i + 1] is vowel
blank = &line[i+1]; // blank is set to til point to the value of line[i+1]
hlp = &line[i]; // hlp is set to point to the value of line[i]
*hlp = *blank; // shifting left
} else if (startshift && isvowel(line[i+1])) {
blanktwo = &line[i+1];
hlptwo = &line[i];
*hlptwo = *blanktwo;
//*hlptwo = line[i + 2]; // LAST MOD, doesn't work
}
for (j = 0; j < 10; j++) { // TODO: j < NVOWELS
if (line[i] == vowels[j]) { // TODO: COULD TRY COPY EVERYTHING EXCEPT VOWELS
blanktwo = &line[i+1];
hlptwo = &line[i];
*hlptwo = *blanktwo;
startshift = 1;
}
}
i++;
}
printf("%s", line);
的代碼不能正常工作。
用的text.txt:
The boy kicked the ball
He kicked it hard
./oblig1刪除test.txt的產生: 釷男孩把球踢
e kicked it hard
注意
。我省略了用於迭代文本文件中行的外部while循環。
很遺憾,您的代碼示例是不完整的;至少有一些功能簽名丟失。 –
真的嗎?你什麼意思? –