簡體   English   中英

用字符串進行C通用編程

[英]C general programming with strings

如果不允許使用<string.h>庫,如何輕松比較字符串的值。 我有一個數據文件,其中一個結構的一個成員有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;

我具有“ penny”的值,該如何與之比較或關聯?

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"然后才能為其分配一分錢的價值

您可以嘗試以下功能:

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負,則輸出為零。

最快的:

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;
 }
/*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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM