1

getchar()Cの関数から収集された文字列内の各単語を反復処理する方法を探しています。ポインターを使用できません。文中の各単語には何かが加えられますが、他の単語の影響を受けないようにする必要があります。たとえば、3番目の単語にいるbuffer[k]場合でもk = 0、最初の文字を入力する場合など、文字にアクセスする方法が必要です。 3番目の単語。

void read_line (char buffer[])
{
    char character;
    int i = 0;

    for (i = 0; i < 32; ++i)
    {
        character = getchar ();
        buffer[i] = character;
    }
}
4

3 に答える 3

1

通常、文字列内のスペースを見つけるには strchr を使用しますが、ポインターを使用できないため:

void read_line (char buffer[]) 
{ 
    char character; 
    int i = 0; 

    for (i = 0; i < 32; ++i) 
    { 
        character = getchar (); 

        if (character == '\n')
            break;

        buffer[i] = character; 
    } 

    i = 0;

    while (buffer[i] != '\n')
    {
        for (; buffer[i] != ' '; ++i)
            // each iteration of this loop will be on the same word

        ++i;
    }
} 
于 2012-10-24T22:25:22.183 に答える
1

ポインタがないとちょっと難しいです(配列を渡していますが、それらもポインタです)。しかし、おそらくメモリをまったく割り当てなくても実行できます。strtokを見てください。

説明:

以下のコメントで @EdS が指摘したように、配列とポインターは同じものではありません。ただし、多くの状況下ではほとんど同じです関数に配列を渡すことと、関数にポインターを渡すことは、ほぼ常に同じことです。

したがって、ポインターと配列は同じではないことを覚えておいてください。違いを学ぶ必要がありますが、まだ心配する必要はありません。

于 2012-10-24T22:18:33.933 に答える
1

書かれた文字列を読んで単語を数えたいのですが、よろしいですか?

まず、次のように文字列を読み取ります。

char* str = gets(NULL);
int i = 0;
char* tok = strtok(str," ");
while(tok != NULL) {
    i++;
    tok = strtok(NULL, " ");
}

スペースで区切られたすべての単語を数えます。

于 2012-10-24T22:23:09.380 に答える