構造体を使用してPascalスタイルの文字列をC型に変換する方法

デクスター

Pascalスタイルの文字列を構造体として定義し、C文字列も定義してから、C文字列"Mississippi"をPascalスタイルの文字変換する関数を作成する必要がありました。Pascalスタイルの文字列にはint、文字数のあるメンバー変数、末尾にchar文字列のない変数があります'\0'

私の問題はforループ関数にあります。C文字列の文字を新しく定義されたPascalスタイルの文字列に入れるにはどうすればよいですか?

string.hヘッダーファイルの使用は許可されていません

#include <stdio.h>
#include <stdlib.h>

typedef struct PascalString {
  int size;
  char *string;
} PString;

struct PascalString *newPascalString(char *stringC) {  
  int i;  
  PString *pascal_string = malloc(sizeof(struct PascalString));  
  pascal_string->size = 11;
  pascal_string->string = malloc(sizeof(char) * pascal_string->size);

  for(i = 0; i < pascal_string->size; i++) {
    pascal_string[i] = stringC[i];  // here is my problem
  }  
  return pascal_string;
}

int main()
{ 
  char *c_string = "Mississippi";
  newPascalString(c_string);  
  return 0;
}
イハロブアルアシミ

これを変更するだけ

for(i = 0; i < pascal_string->size; i++)

for(i = 0; (i < 11) && (stringC[i] != 0) ; i++)

C文字列は'\0'終了しているため、終了が見つかる'\0'か、スペースが不足するまでループする必要があります。

このように文字列の長さを計算することもできます

for (i = 0 ; stringC[i] != '\0' ; ++i)
    pascal_string->size++;

ループをそのままにします

for(i = 0; i < pascal_string->size; i++)

コードに別の問題があります。これは摩耗しています。

pascal_string[i] = stringC[i];

stringこのようにメンバーに文字を保存する必要があります

pascal_string->string[i] = stringC[i];

どうやらあなたはこれが必要です

#include <stdio.h>
#include <stdlib.h>

typedef struct PascalString {
    int size;
    char *string;
} PString;

PString *newPascalString(char *stringC) {
    int i;

    PString *pascal_string = malloc(sizeof(struct PascalString));
    if (pascal_string == NULL) /* always check the return value of malloc */
        return NULL;

    pascal_string->size = 0;
    for (i = 0; stringC[i] != '\0'; ++i)
        ++pascal_string->size;

    pascal_string->string = malloc(pascal_string->size);
    if (pascal_string->string == NULL) {
        free(pascal_string);
        return NULL;
    }

    for(i = 0; i < pascal_string->size; i++)
        pascal_string->string[i] = stringC[i];  // here is my problem

    return pascal_string;
}

int main()
{
    char *c_string = "Mississippi";
    PString *pascal_string;

    pascal_string = newPascalString(c_string);
    if (pascal_string != NULL) {
        if (pascal_string->size == 11)
            printf("the pascal string has length 11 excluding the terminating `'\\0'`.\n");
        else
            printf("the pascal string length is not 11.\n");
        if (pascal_string->string != NULL) {
            /* write to standard output exacly pascal_string->size characters */
            /* printf will not work here, it needs `'\0'` at the end */
            fwrite(pascal_string->string, 1, pascal_string->size, stdout);
            printf("\n");
            /* free pascal_string->string, allocated with 
             *
             *     pascal_string->string = malloc(pascal_string->size) 
             */
            free(pascal_string->string);
        }
        /* free pascal_string, allocated with
         *
         *     pascal_string = malloc(sizeof(struct PascalString)) 
         */
        free(pascal_string);
    }
    /* since pascal_string == NULL no need to call free */
    return 0;
}

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

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

編集
0

コメントを追加

0

関連記事

文字列型の列を構造体に変換し、PySparkを使用して列を解凍します

Cを使用して、データベースから構造体のポインタ変数の配列に文字列を割り当てて読み取る方法

C ++で文字列を使用して構造体にテキストファイルを保存する方法

文字列を使用してタイプ[] byteの構造体フィールドにアクセスする

文字列をカスタム構造体に変換するGo

構造体の int を C の文字列に変換する

構造体ポインタ-ポインタを使用して構造体の配列にアクセスする

文字列を他の構造体に変換する方法

構造体ポインタをgoの型ポインタのリストに変換する方法

goで構造体のスライスを文字列のスライスに変換する方法は?

Rustの関数に構造体(構造体インスタンスなし!)を要求して使用する方法は?

構造体を文字列のスライスに変換しますか?

構造体を使用してJSONを配列に変換する

C ++ / Qtの構造体のフィールドに文字列を変換する方法はありますか?

マイクロ秒単位の文字列をCで構造体tmに変換する方法は?

構造体の配列をリストレルムに変換する方法は?

文字列を構造体配列に変換する方法

「ポインタを使用して構造体の配列にアクセスする」別の方法

CGOを使用して構造体のGoネスト配列をCに変換しますか?

「reflect」を使用して構造体の構造体内にインターフェース値を設定する方法

他の構造体変数を使用して別の構造体変数にアクセスする方法は?

構造体からデータをループし、それを文字列の配列に変換してCSVを作成する

json文字列をスキーマなしで構造体列に変換する方法をスパークする

json文字列の列を構造体に変換します

構造体バインディングを使用してカスタム構造体の値を変更する

構造体の配列を文字列に変換するPyspark

JSON文字列を構造体に変換する方法

Golangの構造体へのポインターを使用してメソッドを関数に変換する

ポインタc ++を使用して構造体の配列内の要素を交換する

TOP 一覧

  1. 1

    どのように関係なく、それがどのように「悪い」、すべてのSSL証明書でのHttpClientを使用しないように

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Modbus Python Schneider PM5300

  4. 4

    System.Data.OracleClient.OracleException:ORA-06550:行1、列7:

  5. 5

    scala.xmlノードを正しく比較する方法は?

  6. 6

    インデックス作成時のドキュメントの順序は、Elasticsearchの検索パフォーマンスを向上させますか?

  7. 7

    Elasticsearch - あいまい検索は、提案を与えていません

  8. 8

    グラフ(.PNG)ファイルをエクスポートするZabbix

  9. 9

    Ansibleで複数行のシェルスクリプトを実行する方法

  10. 10

    変数値を含むElasticSearch検索結果

  11. 11

    Elasticsearchでサーバー操作を最適化:低いディスク透かしに対処する

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  14. 14

    テキストフィールドの値に基づいて UIslider を移動します

  15. 15

    Chromeウェブアプリのウェブビューの高さの問題

  16. 16

    NGX-ブートストラップ:ドロップダウンに選択したアイテムが表示されない

  17. 17

    Reactでclsxを使用する方法

  18. 18

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  19. 19

    Pushwooshで削除されたアプリデバイストークンを処理する方法は?

  20. 20

    ラベルとエントリがpythontkinterに表示されないのはなぜですか?

  21. 21

    Elasticsearchの場合、間隔を空けた単語を使用したワイルドカード検索

ホットタグ

アーカイブ