文字列の終わりを比較する

user13442873

異なる文字列を比較するプログラムを書いています。具体的には、で終わる化学元素OH文字列がOH。で終わる場合は-1を返す必要がありますしかし、私のプログラムは機能しません。私はどこが間違っていますか?

#include <stdio.h>
#include <string.h>

int hydroxide(char *string);

int main() {
    char *string;
    printf("Enter String:");
    gets(string);
    printf("%d", hydroxide(string));
}

int hydroxide(char *string) {
    string = strrchr(string, 'O');
    if (string != NULL)
        return (strcmp(string, "OH"));
    return (-1);
 }
モスクワ出身のヴラド

手始めに、関数のロジックは間違っています。

通常、このような関数は、「はいまたはいいえ」などの質問に答えたときに、論理対応する、または1論理に対応する(または正の値)を返す必要があります。true0false

この呼び出し

strcmp(string, "OH")

2つの文字列が等しい場合は0を返します。それ以外の場合、関数は、最初の文字列が2番目の文字列より大きいか小さいかに応じて、正または負の値を返すことができます。

これとは別にconst、渡された文字列は関数内で変更されないため、関数パラメーターには修飾子が必要です。

文字列を読み取るメモリを予約していません。宣言されたポインタ

char *string;

は初期化されておらず、値は不確定です。したがって、この呼び出し

gets(string);

未定義の動作を呼び出します。

この機能getsは安全でない機能であり、C標準ではサポートされていないことを考慮してください代わりに、標準のC関数を使用する必要がありますfgets

そして、関数がより一般的なものになると、はるかに良くなります。それは、文字列の指定されたサフィックスをチェックできるときです。常により一般的な関数を書くようにしてください。この場合、それらは再利用可能です。

以下に、関数の定義方法を示すデモプログラムがあります。

#include <stdio.h>
#include <string.h>

int hydroxide( const char *s, const char *suffix )
{
    size_t n1 = strlen( s );
    size_t n2 = strlen( suffix );

    return !( n1 < n2 ) && strcmp( s + n1 - n2, suffix )  == 0;
 }

int main(void) 
{
    enum { N = 100 };
    char s[N];

    while ( 1 )
    {
        printf( "Enter a String (empty string - exit): " );

        if ( fgets( s, N, stdin ) == NULL || s[0] == '\n' ) break;

        s[ strcspn( s, "\n" ) ] = '\0';

        printf( "%s\n", hydroxide( s, "OH" ) ? "true" : "false" );
    }

    return 0;
}

プログラムの出力は次のようになります

Enter a String (empty string - exit): brogrammerOH
true
Enter a String (empty string - exit): 

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ポインタと文字列の文字の終わりを比較する

分類Dev

文字列の終わりを数える

分類Dev

Java文字列の終わりから行末文字を削除する

分類Dev

pandas文字列は列の値で終わり、文字列の先頭を比較用の日付に変換します

分類Dev

ファイルの終わりを文字列に追加する方法

分類Dev

R質問:文字列の終わりから数字を抽出する

分類Dev

EOS(文字列の終わり)でRaku文法を停止する

分類Dev

文字列の終わりを抽出する-Javascript

分類Dev

C#文字列の終わりの句読点を文字列に保持する

分類Dev

文字列の終わりを確認する(終わりの長さを変える)

分類Dev

大文字で終わり、正規表現の特定の単語で終わる文字列を検索します

分類Dev

特定の文字を文字列の終わりに移動する再帰JS関数

分類Dev

文字列の終わりを切り取ります

分類Dev

文字列の別の終わりに一致する文字列の終わりから文字を削除/削除する方法

分類Dev

文字列文字の終わりを示すコンソール

分類Dev

で始まり、で終わる単語の部分文字列を検索する

分類Dev

VBA、文字列の終わりを解析し、文字列にカスタムの終わりを追加します

分類Dev

Python:文字列の終わりから下線をトリミングする

分類Dev

ABAPデバッガで長い文字列の終わりを表示する

分類Dev

{{で始まり}で終わる文字列内のすべての部分文字列を検索する方法

分類Dev

バイト配列から文字列への変換で文字列の終わりを検出する方法は?

分類Dev

Postgresql-文字列の終わりと終わりの数値のない文字列から数値を取得する方法

分類Dev

Reactで文字列の代わりに整数を比較します

分類Dev

文字で終わり、その文字を削除するSED単語

分類Dev

文字で終わり、その文字を削除するSED単語

分類Dev

文字列 char[] を C 行の終わりまで読み取る

分類Dev

$ {で始まり、}で終わる文字列を抽出します

分類Dev

.00で終わる場合のdoubleの文字列表現を比較する方法

分類Dev

uitextviewで文字列の終わりを取得します

Related 関連記事

  1. 1

    ポインタと文字列の文字の終わりを比較する

  2. 2

    文字列の終わりを数える

  3. 3

    Java文字列の終わりから行末文字を削除する

  4. 4

    pandas文字列は列の値で終わり、文字列の先頭を比較用の日付に変換します

  5. 5

    ファイルの終わりを文字列に追加する方法

  6. 6

    R質問:文字列の終わりから数字を抽出する

  7. 7

    EOS(文字列の終わり)でRaku文法を停止する

  8. 8

    文字列の終わりを抽出する-Javascript

  9. 9

    C#文字列の終わりの句読点を文字列に保持する

  10. 10

    文字列の終わりを確認する(終わりの長さを変える)

  11. 11

    大文字で終わり、正規表現の特定の単語で終わる文字列を検索します

  12. 12

    特定の文字を文字列の終わりに移動する再帰JS関数

  13. 13

    文字列の終わりを切り取ります

  14. 14

    文字列の別の終わりに一致する文字列の終わりから文字を削除/削除する方法

  15. 15

    文字列文字の終わりを示すコンソール

  16. 16

    で始まり、で終わる単語の部分文字列を検索する

  17. 17

    VBA、文字列の終わりを解析し、文字列にカスタムの終わりを追加します

  18. 18

    Python:文字列の終わりから下線をトリミングする

  19. 19

    ABAPデバッガで長い文字列の終わりを表示する

  20. 20

    {{で始まり}で終わる文字列内のすべての部分文字列を検索する方法

  21. 21

    バイト配列から文字列への変換で文字列の終わりを検出する方法は?

  22. 22

    Postgresql-文字列の終わりと終わりの数値のない文字列から数値を取得する方法

  23. 23

    Reactで文字列の代わりに整数を比較します

  24. 24

    文字で終わり、その文字を削除するSED単語

  25. 25

    文字で終わり、その文字を削除するSED単語

  26. 26

    文字列 char[] を C 行の終わりまで読み取る

  27. 27

    $ {で始まり、}で終わる文字列を抽出します

  28. 28

    .00で終わる場合のdoubleの文字列表現を比較する方法

  29. 29

    uitextviewで文字列の終わりを取得します

ホットタグ

アーカイブ