1

誰かがこのコードで私を助けてくれますか? トピックのように機能する必要があることが書かれています。大丈夫ですか ?さらに必要なのは、行われた変更の数を数えることです。これを実装する方法は?

int change(char *path){

FILE *f = fopen(path, "r");
if(f==NULL){
    printf("Error...");
    return -1;
}
int text, length;

    fscanf(f, "%s", &text);
    length = strlen(text);

 for(i = 0; i < length; ++i){
    if(islower(text[i]))
          {
          text[i] = toupper(text[i]);
          }
    if(isupper(text[i]))
    {
        text[i] = toslower(text[i]);
    }
fprintf(f,"%s",text);
fclose(f);
4

2 に答える 2

1

変更の数を数えるには、変数(int count = 0)を作成し、変更ごとに増分します(count++)。

int change(char *path){


    FILE *f = fopen(path, "r");

    if(f==NULL){
        printf("Error...");
        return -1;
    }

    int text, length;
    int count = 0;

    fscanf(f, "%s", &text);
    length = strlen(text);

    for(i = 0; i < length; ++i){
        if(islower(text[i]))
        {
            text[i] = toupper(text[i]);
            count++;
        }
        if(isupper(text[i]))
        {
            text[i] = tolower(text[i]);
            count++;

        }
    }

    fprintf(f,"%s",text);
    fclose(f);
 }
于 2012-11-25T23:12:31.980 に答える
1

現時点では、コードはまずテキストを小文字から大文字に変更しようとし、これが成功した場合は小文字に戻します。2 つのケースがあり、下から上に変化し、下に戻るか、まったく変化しないため、それはあなたが望んでいることではないと思います。

変更を追跡するために、ゼロに初期化する変数「変更」を追加します。

代わりに、文字を小文字の場合は大文字に、大文字の場合は小文字に変更したい場合は、次のように書き換えます。

if(islower(text[i])) {
    text[i] = toupper(text[i]);
    changes++;
} else if(isupper(text[i])) { 
    text[i] = tolower(text[i]);
    changes++;
}

toslower(text[i]) というスペルミスもありますが、tolower(text[i]) という意味だったと思います。

于 2012-11-25T23:18:33.970 に答える