【问题标题】:Count number of chars in char array including spaces until null char计算 char 数组中的字符数,包括空格,直到 null char
【发布时间】:2010-09-23 13:38:47
【问题描述】:

我正在尝试计算 char 数组中的字符数,包括到字符串末尾的空格。

以下编译但不返回正确的值,我正在尝试使用指针算术来遍历我的数组。

   int numberOfCharsInArray(char* array) {
       int numberOfChars = 0;
       while (array++ != '\0') {
           numberOfChars++;
       }
       return numberOfChars;
   }

非常感谢。

显然我正在尝试从 cstring 中获取等价的 length(),但使用的是简单的 char 数组。

当然,如果我的原始数组不是以 null 结尾的,这可能会导致返回一个非常大的值(我猜)。

【问题讨论】:

  • 如果您提供一个示例输入并告诉我们您希望看到的内容(在这种情况下非常简单)以及您实际得到的内容,这确实会有所帮助。

标签: c++ char math


【解决方案1】:

要通过指针访问字符指针,您需要取消引用指针。目前你是 将array(地址)与 '\0'

你可以像这样修复你的代码:

int numberOfCharsInArray(char* array){
 int numberOfChars = 0;
   while (*array++){
       numberOfChars++;
   }
   return numberOfChars;
}

你模仿的cstring函数是strlen而不是length

编辑:

要了解 while 中的条件如何工作,您可以查看 this thread

【讨论】:

  • 他说的可能是 MFC 的 CString 类的 length() 方法。另外,我看不到任何双倍增量?取消引用的省略似乎是关键。
  • 由于您的(好的)答案没有解释为什么您还删除了针对 '\0' 的不等式测试,我将添加(以防万一): != '\0' 部分不需要测试,因为 '\0' 实际上等于数字 0,它转换为 false,而所有其他字符都非零,因此为 true。
  • 对不起,我发布了它并立即看到了双倍增量,我以为我及时到达了编辑按钮,没有人看到它。你们太快了!
  • 如果输入参数arrayNULL怎么办?
  • 好吧,strlen 做什么有什么关系?根据 OP 的问题定义(“计算 char 数组中的字符数......”),没有提及 strlen。我知道strlen 是一个 similar 函数,但我不确定为什么需要在这里模仿它的行为。无意冒犯,只是一个想法。
【解决方案2】:

也许我错过了什么,但为什么不只是:

int numberOfCharsInArray(char* array) {
  return strlen(array);
}  

...甚至:

int numberOfCharsInArray(char* array) {
  return std::string(array).length();
}

【讨论】:

  • 我认为 OP 正在尝试自己实现字符串长度函数,所以那是作弊。
  • @gspr:你可能是对的,但在那种情况下,我想知道他为什么要在广阔的世界里重新发明那个轮子?
  • erm,不,我只是不知道这个功能(我是新手)。
【解决方案3】:

当您编写array++ != '\0' 时,您会检查内存地址 array 是否为“\0”。试试这个:

int numberOfCharsInArray(char* array){
int numberOfChars = 0;
while (*array != '\0'){
   numberOfChars++; array++;
   }
return numberOfChars;
}

编辑:糟糕,codaddict 更快,他的代码更优雅。

【讨论】:

    【解决方案4】:
    static const size_t maxExpectedChars = 4 * 1024; // Max chars expected, e.g. 4K    
    size_t numberOfCharsInArray( char * array) {
        if( !array ) { return 0; }         // A non-existing string has `0` length
        size_t charsSoFar = 0;
        while ( *array ) {
            charsSoFar += 1;
            if( charsSoFar == maxExpectedChars ) { break; }  // Stop runaway loop
            ++array;
        }
        return charsSoFar;
    } 
    

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2013-12-21
      • 2021-05-23
      • 2016-02-05
      • 2015-04-21
      • 1970-01-01
      • 2019-03-25
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多