0

私の.cプログラムは、作成時にオブジェクトに「名前」を付けます。その名前に応じて、さまざまなタスクを実行できる必要があります。私はこれに非常に慣れておらず、いくつかの方法を試しましたが成功しませんでした。これが私が思いついたものです。

if (name ==  "james"){

    //Do a bunch of stuff
    } 
if (name ==  "tom"){

    //Do a bunch of stuff
    } 

これは成功しませんでした。「名前」が1つである場合、他の名前を実行しないようにする方法はありますか?

助けてくれてありがとう

4

5 に答える 5

3

'name'がC++文字列の場合、作成した内容は正常に機能するはずです。char[]またはの場合char *は、を使用しますstrcmp

于 2012-04-20T10:12:21.233 に答える
2

ライブラリ関数を見てくださいstrcmp。使用するとき==は、ポインタの背後にある実際の文字列配列ではなく、ポインタ自体を比較するだけです。

于 2012-04-20T10:11:11.123 に答える
1

ではC、文字列は。で終わる文字のシーケンスとして定義されます\0。文字列定数は通常、 `"内で表されます。たとえば、char a [10]="hello"のようになります。

2つの文字列を比較するために、で使用できるようなライブラリ関数を使用できstrcmp()ますstring.hman strcmpこの関数の詳細を読むために行ってください。

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

int main()
{
        char name[] = "tom";

        if (strcmp(name, "tom") == 0) {
            printf("name is tom! \n");
        } else if (strcmp(name, "bob") == 0) {
            printf("name is bob! \n");
        } else {
            printf("who is this?! \n");
        }

        return 0;
}

strcmpは、次の方法で実装できます(参照用の配列とポインターのバージョン)

int strcmp1(char a[], char b[])
{
        int i=0;
        while (a[i] == b[i]) {
                if (a[i] == '\0')
                        return 0;
                i++;
        }

        return a[i]-b[i];
}

int strcmp2(char *a, char *b)
{
        while (*a == *b) {
                if (*a == '\0')
                        return 0;
                a++; b++;
        }
        return *a-*b;
}
于 2012-04-20T10:20:48.947 に答える
1

次のように使用する必要がありますstrcmp

if (!strcmp(name,"james")){

を使用する==と、name(文字列の開始アドレス)の内容が文字列リテラル「james」の開始アドレスと比較されます。これは確かに必要なものです。

于 2012-04-20T10:11:33.550 に答える
1

これが標準の.cプログラムであり、「名前」が実際にはその場合、関数にstrings.h標準cライブラリchar*を使用する必要があると仮定します。strcmp()

等式演算子==は、std::stringおよびその他の文字列クラス用です。

例えば

if (strcmp(name,"james")==0){
  /* Do stuff */
}

また、switch複数のテストの条件を考慮することもできます。

于 2012-04-20T10:19:07.777 に答える