【问题标题】:Length of string in array of string字符串数组中字符串的长度
【发布时间】:2015-11-05 00:46:44
【问题描述】:

我正在尝试在我的代码中使用单个字符串的大小。这就是我所拥有的

const static char * keypad[] = {
    "ex",
    "bobbb",
    "test",
};

但是当我尝试使用时,例如,

sizeof(keypad[i]); 

它不会为每个字符串返回正确的大小。无论如何在 C++ 中可以做到这一点?我仅限于

#include <stdio.h> 
#include <ctype.h> 

出于某种随意的原因。

【问题讨论】:

标签: c++ arrays


【解决方案1】:

keypad 不是 字符串 的数组。它是一个 指针数组,每个指针都指向一个 C 风格的字符串(的第一个字符)。

sizeof keypad[i] 为您提供其中一个指针的字节大小,可能是 4 或 8 个字节。

确定字符串的长度(定义为不包括终止'\0' 空字符的字符数)的方法是调用strlen() 函数。如果不允许使用&lt;string.h&gt;,则必须自己编写等效函数。

(你可以合法地声明strlen而不包括&lt;string.h&gt;,但我认为这会被认为是作弊,所以我不会告诉你怎么做。)

(在 C++ 中真正的方法是定义一个std::vector&lt;std::string&gt;,但显然你不允许这样做。也许当前练习的部分重点是向您展示不同的方法可以多么方便。)

【讨论】:

    【解决方案2】:

    您可以对数组的每个元素使用 strlen 函数。如果您不能使用 string.h,那么您可以编写自己的。只需遍历每个字符,直到找到终止的 '\0'。

    鉴于您的限制(可能是老师?),您有两个任务。一种是编写自己的 strlen 函数。二是弄清楚如何遍历数组的每个元素。第二个任务归结为计算数组的长度(假设您没有对其进行硬编码)。

    【讨论】:

    • 不幸的是,我不允许#include
    【解决方案3】:

    sizeof(keypad[i]);

    是一个存储地址的数组。 这些地址
    地址[0]

    地址[1]

    地址[2]

    指向字符串,因为它们是指针,大小可能为 4 字节,也可能因处理器而异。

    为了得到完整的尺寸

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    const static char * keypad[] = {
        "ex",
        "bobbb",
        "test",
    };
    int i,size=0;
    for(i=0;i<sizeof(keypad)/sizeof(char*);i++)
    {
        size=size+strlen(keypad[i]);
    }
    cout<<size;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2011-05-13
      • 2020-08-14
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多