文字列を別の文字列にstrcpyするとスペースがあります

ダニエル・ゴー

私のクラスには、ある種の論理的な割り当てがあります。したがって、私の質問は、文字列を別の文字列にstrcpy()しようとすると、新しい文字列に(スペースのように)あります。私はそれを削除する方法がわかりません、おそらく私の間違いです。助けてください、ありがとう。

このプログラムでは、キーボードで文字や記号を入力し、それをキャプチャして記号を数えることができます。その後、返却してください。

これがCの私のコードです

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define N 25
typedef char string[N];

int main(int argc, char *argv[]) 
{
    int i,j;
    int jumlah[10];

    string inputan;
    string temp;
    int counter;

    //Init
    for(i=0;i<10;i++) {
        jumlah[i]=0;
    }

    for(i=0;i<10;i++) {
        temp[i]='-';
    }

    for(i=0;i<10;i++) {
        inputan[i]='-';
    }


    do {

        system("cls");
        printf("\nMasukan kalimat: ");fflush(stdin);gets(inputan);

        if(strcmpi(inputan,"0")!=0) {
            strcpy(temp,inputan);
        }
        getch();

    }while(strcmpi(inputan,"0")!=0);


    printf("Hasil Analisa:\n\n");

    for(i=0;i<10;i++) {

        if(temp[i]!='-') {

            char c = temp[i];
            for(j=0;j<10;j++) {

                if(temp[j]!='-') {

                    if(c == temp[j])
                        counter+=1;

                }

            }

            jumlah[i] = counter;
            counter = 0;
        }

    }


    for(i=0;i<10;i++) {

        if(temp[i]!=' ' && temp[i]!='-' && temp) {
            printf("\t%c terdapat %d\n",temp[i],jumlah[i]); 
        }

    }

    getch();

}

そして、これが私のコンソールの結果です:

スペースがあります

これで、プログラムはスペース記号を表示してカウントします。

また、もう一度質問できる場合は、同じ記号を持つ別のインデックスに記号が再びある場合に、1つの文字だけを表示する方法を説明します。Thx、私の英語が流暢でないなら許してください。

ライカー

印刷物の最後に表示されるスペースは、含めるテスト条件のリストが原因です。

if(temp[i]!=' ' && temp[i]!='-' && temp)

除外する必要のあるいくつかの追加条件が欠落している可能性があります:
1)追加のテストを追加:test[i] != 0
2)に変更さtemp[i] != ' '!isspace(temp[i])、すべての空白に対してテストます。

これらが追加されたら:

if(!isspace(temp[i]) && temp[i]!='-' && temp && (temp[i] != 0))

入力されたテキストは、最後の空白以外の文字までしか印刷されません。

コードの変更:
次のコードに他のマイナーな変更をいくつか追加して、コードを自分の環境でコンパイルできるようにしました。私の変更はC標準ライブラリの一部である関数を使用しているので、これもコンパイルする必要があります。変更には、for(...)作成した配列サイズに対応するためのループの拡張も含まれ、N-110文字だけではなく最大文字までの入力が可能になります。私が行ったことのほとんどには、コメント付きの説明が含まれています。

int main(int argc, char *argv[]) 
{
    int i,j;
    //int jumlah[10]; 
    int jumlah[N]; // probably meant to use N here?

    string inputan = {0};
    string temp = {0};
    int counter = 0;// initialize

    for(i=0;i<N;i++) {
        jumlah[i]=0;
    }

    for(i=0;i<N-1;i++) {
        temp[i]='-';
    }

    for(i=0;i<N-1;i++) {
        inputan[i]='-';
    }


    do {

        //system("cls");  This is fine, just does not work in my environment, so commented.
        //printf("\nMasukan kalimat: ");fflush(stdin);gets(inputan);
        printf("\nPut Sentence (or \"0\" to process): ");fflush(stdin);gets(inputan);// clarified instructions.

        if(stricmp(inputan,"0")!=0) {  //strcmpi
            strcpy(temp,inputan);
        }
        //getch(); this (or getchar()) is really not necessary here to support
        //         the flow of your application.

    }while(stricmp(inputan,"0")!=0);



    printf("Hasil Analisa:\n\n");

    for(i=0;i<N;i++) { //replace 10 with N

        if(temp[i]!='-') {

            char c = temp[i];
            for(j=0;j<N;j++) {  //replace 10 with N

                if(temp[j]!='-') {

                    if(c == temp[j])
                        //counter+=1;
                        counter++; // var++ equivalent var += 1

                }

            }

            jumlah[i] = counter;
            counter = 0;
        }

    }


    for(i=0;i<N;i++) {

        //if(temp[i]!=' ' && temp[i]!='-' && temp) { // only spaces ?
        if(!isspace(temp[i]) && temp[i]!='-' && temp && (temp[i] != 0)) { // temp[i] != 0, and exclude all white space
            printf("\t%c terdapat %d\n",temp[i],jumlah[i]); 
        }

    }

    getchar();    //orig getch() not standard

}

質問への対処:同じ記号を持つ別のインデックスに記号が再びある場合に、1つの文字のみを表示する方法。

使用された文字のリストと使用された回数を表示することは、別の関数でより適切に処理される可能性があります。以下の行を挿入することにより、元のメイン関数で呼び出すように適合させることができます。

char *res = letterCounter("this is the string");
printf(res);
free(res);

既存の行のすぐ下:(printf("Hasil Analisa:\n\n");つまり、その行の下のすべてのコードをgetch();関数まで置き換えます

char * letterCounter(const char *string)
{
    int i, j;
    int len = strlen(string);
    char *dup = StrDup(string);
    if(!dup) return NULL;
    int viewableAscii = '~' - '!'; /// range of ASCII from ! to ~ (33 - 126)
    char buf[20];
    char * results = calloc(100*strlen(string), 1);//ensure enough room
    if(!results) return NULL;
    /// caps 'A' == 65, 'Z' == 90
    /// lowr 'a' == 97, 'z' == 122
    /// all visable printables: 33 - 126
    unsigned char characterUsageCounter[viewableAscii];
    memset(characterUsageCounter, 0,viewableAscii); 

    for(i=0;i<len;i++)
    {
        for(j=0;j<viewableAscii;j++)
        {
            if(dup[i]  == 33 + j)
            {
                characterUsageCounter[j]++;
            }
        }
    }
    for(i=0;i<viewableAscii;i++)
    {
        if(characterUsageCounter[i] > 0)
        {
            if(characterUsageCounter[i] == 1) sprintf(buf, "%c occurs %d time\n", i+33, characterUsageCounter[i]);
            else sprintf(buf, "%c occurs %d times\n", i+33, characterUsageCounter[i]);
            strcat(results, buf);
        }
    }

    return results;
}

たとえば、文字列「this is the string」が引数としてその関数に渡された場合、次のように出力されます。
ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この文字列を配列にする方法-文字列にはスペースがあり、値もあります

分類Dev

文字列配列に終了文字用のスペースを含める必要がありますか?

分類Dev

スペースのある文字列をスペースのない文字列とcamelCasejavascriptに変換します

分類Dev

strsplit()は、文字列の最初と最後にスペースがあると動作が異なります

分類Dev

スペースで区切られた文字列の要素を逆にすると、元の文字列よりも大きな文字列が返されます

分類Dev

最初の文字列の最後にスペースがある2つの文字列を連結しますMatlab

分類Dev

大文字の後にスペースを入れずに小文字が続く場合に文字列を分割する方法はありますか?

分類Dev

文字列のすべての文字の間にスペースがあるかどうかを確認します

分類Dev

rの文字列のスペースの中間にある文字を取り出します

分類Dev

文字列をアルファベット順に並べ替えますが、文字列が別の文字列のプレフィックスとして完全に存在する場合は、長い文字列が最初に来る必要があります

分類Dev

リスト内の文字列のスペースの間に「-」を挿入する方法はありますか?

分類Dev

サイズ1の宛先文字列を使用するときに、strcpyがソース文字列の最初の文字を省略するのはなぜですか?

分類Dev

Objective-Cの別の文字列内にスペースがある文字列を検索するにはどうすればよいですか?

分類Dev

間にスペースがいくつあるかに関係なく、文字列の最初の2つのトークンを抽出する必要があります

分類Dev

スペースを含めることができる、別の文字列に含めることができる文字列mysqldbを検索する

分類Dev

文字列に複数のスペースが存在する場合、単語数が正しくありません

分類Dev

文字列にスペースがあるかどうかを確認します

分類Dev

1つのセルのテキスト文字列のデータを別のセルのデータの列と比較する必要があります

分類Dev

1つのセルのテキスト文字列のデータを別のセルのデータの列と比較する必要があります

分類Dev

文字列に文字スペース文字スペースと別の文字C#が含まれていることを確認するにはどうすればよいですか?

分類Dev

n文字ごとに文字列をカットする方法は?スペースがある場合にのみカットします

分類Dev

文字列にn文字ごとにスペースがあることを確認するJavascript関数

分類Dev

文字列をスペースと比較すると、 'is'演算子の動作が異なります

分類Dev

スペースのある16進文字列をQtのbytearrayに分割します

分類Dev

文字列をtextareaの値として設定する前に、文字列をエスケープする必要がありますか?

分類Dev

文字列内の2文字のペアの外側にあるすべてのスペースを置き換える方法はありますか?

分類Dev

楽:要素をスペースで区切ることなく、配列を文字列に変換する超高速の方法はありますか?

分類Dev

スペースが異なり、ヌル文字の可能性がある文字列を比較する

分類Dev

配列をchar *にキャストすると、文字列の長さに制限がありますか?

Related 関連記事

  1. 1

    この文字列を配列にする方法-文字列にはスペースがあり、値もあります

  2. 2

    文字列配列に終了文字用のスペースを含める必要がありますか?

  3. 3

    スペースのある文字列をスペースのない文字列とcamelCasejavascriptに変換します

  4. 4

    strsplit()は、文字列の最初と最後にスペースがあると動作が異なります

  5. 5

    スペースで区切られた文字列の要素を逆にすると、元の文字列よりも大きな文字列が返されます

  6. 6

    最初の文字列の最後にスペースがある2つの文字列を連結しますMatlab

  7. 7

    大文字の後にスペースを入れずに小文字が続く場合に文字列を分割する方法はありますか?

  8. 8

    文字列のすべての文字の間にスペースがあるかどうかを確認します

  9. 9

    rの文字列のスペースの中間にある文字を取り出します

  10. 10

    文字列をアルファベット順に並べ替えますが、文字列が別の文字列のプレフィックスとして完全に存在する場合は、長い文字列が最初に来る必要があります

  11. 11

    リスト内の文字列のスペースの間に「-」を挿入する方法はありますか?

  12. 12

    サイズ1の宛先文字列を使用するときに、strcpyがソース文字列の最初の文字を省略するのはなぜですか?

  13. 13

    Objective-Cの別の文字列内にスペースがある文字列を検索するにはどうすればよいですか?

  14. 14

    間にスペースがいくつあるかに関係なく、文字列の最初の2つのトークンを抽出する必要があります

  15. 15

    スペースを含めることができる、別の文字列に含めることができる文字列mysqldbを検索する

  16. 16

    文字列に複数のスペースが存在する場合、単語数が正しくありません

  17. 17

    文字列にスペースがあるかどうかを確認します

  18. 18

    1つのセルのテキスト文字列のデータを別のセルのデータの列と比較する必要があります

  19. 19

    1つのセルのテキスト文字列のデータを別のセルのデータの列と比較する必要があります

  20. 20

    文字列に文字スペース文字スペースと別の文字C#が含まれていることを確認するにはどうすればよいですか?

  21. 21

    n文字ごとに文字列をカットする方法は?スペースがある場合にのみカットします

  22. 22

    文字列にn文字ごとにスペースがあることを確認するJavascript関数

  23. 23

    文字列をスペースと比較すると、 'is'演算子の動作が異なります

  24. 24

    スペースのある16進文字列をQtのbytearrayに分割します

  25. 25

    文字列をtextareaの値として設定する前に、文字列をエスケープする必要がありますか?

  26. 26

    文字列内の2文字のペアの外側にあるすべてのスペースを置き換える方法はありますか?

  27. 27

    楽:要素をスペースで区切ることなく、配列を文字列に変換する超高速の方法はありますか?

  28. 28

    スペースが異なり、ヌル文字の可能性がある文字列を比較する

  29. 29

    配列をchar *にキャストすると、文字列の長さに制限がありますか?

ホットタグ

アーカイブ