ポインタを使用して2次元配列の文字列から母音を削除しようとしています。私はそのASCII値で母音を検出することができますが、文字列は更新されません。Cでポインタを使用して母音を文字列から削除
コードのこの部分はに変更できません。
void remove_vowel(char strings[NUM_STRINGS][STRING_LENGTH])
私のコードはどこが間違っていますか?
更新コード:
void remove_vowel(char strings[NUM_STRINGS][STRING_LENGTH])
{
// loop through each row, starting intitally points to last element
for (char(*p)[STRING_LENGTH] = strings; p != strings + NUM_STRINGS; ++p) {
// variable q points to the first element
for (char *q = *p; q != *p + STRING_LENGTH; ++q) {
if (*q != 'a' && *q != 'e' && *q != 'i' && *q != 'o' && *q != 'u') {
//printf("%c",*q);
*q = *q;
}
}
}
}
私は、下記の溶液を使用して再書き込みコードすることができました。誰も助けてくれてありがとう!
あなたは(少なくとも)別々の機能の中に、既存のremove_vowel()
ルーチンを分離する必要があり手始めに
void remove_vowel(char strings[NUM_STRINGS][STRING_LENGTH])
{
// store the array in a pointer
char(*wordHolder)[STRING_LENGTH] = strings;
// loop through each row
for (int i = 0; i < NUM_STRINGS; i++)
{
// assign worl
char *letter = *wordHolder;
char *dest = *wordHolder;
// check if null character
while (*letter != '\0') {
// check for vowels
if (*letter != 'a' && *letter != 'e' && *letter != 'i' && *letter != 'o' && *letter != 'u') {
// assign non-vowel letter to destination
*dest++ = *letter;
}
// move to next letter
letter++;
}
// add null pointer to end of destination
*dest = '\0';
// increment pointer position to next word
wordHolder++;
}
}
'* Q = * Q;' essentialy NOPです。あなたは '* q = * p;'を意味しましたか?またこれは奇妙に見えます: 'char * q = * p'。 –
マジックナンバーを使用しないでください。文字を指定する場合は、代わりに '' a''のような文字を使用します。 – NathanOliver
文字列の配列があります。 (これは文字配列です)。なぜあなたは問題を分割しないのですか? 1つの文字列に対してこれを行う関数を作成し、それをメイン配列をループする別の関数で使用しますか? – Dan