0

ライブラリの使用が許可されていない場合<string.h>、文字列の値を簡単に比較するにはどうすればよいですか。構造体の 1 つのメンバーに対して 6 つの可能な値を持つデータ ファイルがあります。必要なのは、構造体の配列に存在する各値の数をカウントするループを作成することだけです。問題は、値を比較する方法がわからないため、カウンターをインクリメントするタイミングがわからないことです。

 for (i = 0; i < datasize; i++){
    if (struct.membervalue == given)
      givencount++;
    if (struct.membervalue == given2)  // But I can't compare them with the == 
      givencount2++ ;                  // because they are strings.
 }

編集:私が使用しなければならない定義済みの列挙型

 typedef enum { 
     penny = 1,
     nickel = 5,
     dime = 10,
     quarter = 25
 }changeT;

私は「ペニー」という値を持っています。これと比較したり関連付けたりするにはどうすればよいですか?

4

4 に答える 4

2
bool isEqual(const char *string1, const char *string2)
{
    do
    {
        if (*string1 != *string2) return false;
        if (*string1 == 0) return true;
        ++string1;
        ++string2;
    } while (1);
}

更新enum何も変わりません。ペニーのを割り当てる前に、文字列 を特定する必要があります。"penny"

于 2013-01-29T04:09:25.457 に答える
1

次の機能を試すことができます。

int str_cmp(const unsigned char* str1, const unsigned char* str2)
{
    int result;

    do {
        result = (int)*str1 - (int)*str2;
        str1++;
        str2++;
    } while((!result) && (*str1|*str2))

    return result;
}

出力は、等しい場合は正、等しい場合str1>str2は負、str1<str2等しい場合はゼロです。

于 2013-01-29T07:18:57.247 に答える
0
/*These variants could point to invalid memmory, but dont de-reference it.*/
int isEqual(const char *string1, const char *string2)
{
    while (*string1 == *string2++)      
        if ( 0 == *string1++  )      return 1;
    return 0;
 } 

/* This variant is NULL-resistent. For both NULL return true.*/
int isEqual(const char *string1, const char *string2)
{
    if ( !string1 || !string2   )      return  string1 == string2 ;

    while (*string1 == *string2++)      
        if ( 0 == *string1++  )      return 1;
    return 0;
 } 

これらは、文字列を比較する関数のみです。さらに支援するには、あなたが試しているコードを確認する必要があります。それは次のようなものかもしれません:

if (isEqual(data.membervalue, "penny" )   pennycount++;
else
if (isEqual(data.membervalue, "nickel")   nickelcount++;

そして、あなたが提供した列挙型は、数えるのにあまり役に立ちません。「金額」の合計を計算すると便利です。

int Total= penny * pennycount  + nickel * nickelcount ... ;

合計だけが必要な場合は、次のように簡単になります。

if (isEqual(data.membervalue, "penny" )   Total += penny;
else
if (isEqual(data.membervalue, "nickel")   Total += nickel;
于 2013-02-03T02:57:50.020 に答える
0

最速のもの:

int strcmp(const char *s1, const char *s2) {  
  int ret = 0;  

  while (!(ret = *(unsigned char *) s1 - *(unsigned char *) s2) && *s2) 
    ++s1, ++s2;  

  if (ret < 0) {
    ret = -1;  
  } 
  else if (ret > 0) {
    ret = 1 ;
  }  

  return ret;
 }
于 2013-01-29T07:34:09.543 に答える