2

正しい方向に向けられることを探しているだけです:

Cプログラムへの標準入力があります。一度に各行を取り込み、char[]に格納しました。

char []ができたので、最後の単語(スペースで区切られていると仮定)を取得して小文字に変換するにはどうすればよいですか?

私はこれを試しましたが、プログラムがハングします:

while (sscanf(line, "%s", word) == 1)
    printf("%s\n", word);

提案されたものを取り入れてこれを思いついたのですが、これを行うためのより効率的な方法はありますか?

char* last = strrchr(line, ' ')+1;

while (*last != '\0'){   
    *last = tolower(*last);
    putchar((int)*last);
    last++;
}
4

4 に答える 4

1

これを行う必要がある場合は、おそらくから始めstrrchrます。それはあなたに最後の言葉の始まりを与えるはずです。そこから、文字をウォークスルーして小文字に変換するだけです。ああ、最初に末尾のスペース文字を削除しなければならないという小さな詳細があります。

于 2010-10-24T15:15:55.910 に答える
1

コードの問題は、文の最初の単語を繰り返し単語に読み込むことです。呼び出すたびに次の単語に移動することはありません。したがって、これをコードとして使用する場合:

char * line = "this is a line of text";

その後、sscanfが呼び出されるたびに、「this」がwordにロードされます。また、毎回1ワードを読み取るため、sscanfは常に1を返します。

于 2010-10-24T15:19:30.787 に答える
0

'strtok'は、特定の区切り文字に基づいて入力文字列を分割します。この場合、区切り文字はスペースになります。したがって、「単語」の配列が返され、最後の1つを取得するだけです。

http://www.cplusplus.com/reference/clibrary/cstring/strtok/

この操作を実行する多くの異なる方法を説明し、次にどれが最高のパフォーマンスと使いやすさの特性、またはそれぞれの長所と短所を含んでいるかを判断できます。コードスニペットで上記のことを説明したかっただけです。

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

int main()
{
    char line[] = "This is a sentence with a last WoRd ";

    char *lastWord = NULL;
    char *token = strtok(line, " ");
    while (token != NULL)
    {
        lastWord = token;
        token = strtok(NULL, " ");      
    }

    while (*lastWord)
    {
        printf("%c", tolower(*lastWord++));
    }

    _getch();
}
于 2010-10-24T15:20:24.007 に答える
0

これは役に立ちます:

char dest[10], source [] = "blah blah blah!" ;
int sum = 0 , index =0 ;
while(sscanf(source+(sum+=index),"%s%n",dest,&index)!=-1);
printf("%s\n",dest) ;
于 2010-10-24T15:27:19.887 に答える