C++ 计算字符的字节数

C++ 计算字符的字节数,c++,C++,我有一个作业,它是: 写下面函数的代码,这个函数应该计算s中的字节数,直到它不是'\0' 职能: unsigned len(const char* s); const char k='m'; const char* s=&k; cout << len(s) << endl; 真的我不知道这个作业是什么意思,谁能写这个作业的代码吗? 还有谁能解释一下“Const char*s”是什么意思?如果你能用一些例子来解释,那就太完美了 下面是我正在尝试执行的代码: un

我有一个作业,它是:

写下面函数的代码,这个函数应该计算s中的字节数,直到它不是'\0'

职能:

unsigned len(const char* s);
const char k='m';
const char* s=&k;
cout << len(s) << endl;
真的我不知道这个作业是什么意思,谁能写这个作业的代码吗? 还有谁能解释一下“Const char*s”是什么意思?如果你能用一些例子来解释,那就太完美了

下面是我正在尝试执行的代码:

unsigned len(const char* s)
{
    int count=0;; int i=0;
    while (*(s+i)!=0)
    {
        count++;
        i++;
    }
    return count;
}
但是在main函数中,我不知道应该写什么,顺便说一句,我写了以下内容:

const char k='m';
const char* s=&k;
cout << len(s) << endl;
constchark='m';
常量字符*s=&k;

cout表示您有一个字符串,如
hello world
每个字符串都以
\0
结尾。这意味着它看起来是这样的:
helloworld\0

现在跨过字符数组(
char*s
),直到找到
\0

更新:
\0
实际上只是值的一个字符
0x00
\
用于告诉visualize这是指字符串中的数字
0

示例:
0abc\0
->字符串以数字
0
开头,以
0x0
结尾

编辑
char*
表示变量
s
的类型。它是指向字符数组的指针
const
表示此字符数组是只读的,不能更改。

在C(扩展名为C++)中,字符串可以表示为以空字符结尾的字符序列。因此,字符串“abc”将表示为

'a', 'b', 'c', '\0'

这意味着,您可以通过计算每个字符直到遇到空字符来获得C字符串的长度。因此,如果您有一个以null结尾的
const char*
字符串,您可以通过在该字符串上循环并递增一个计数器变量来找出该字符串的长度,直到找到“\0”字符。

家庭作业意味着您应该编写一个如下行为的函数:

int main() {
    char s[] = {'a','b','c','\0'};
    unsigned s_length = len(s);
    // s_length will be equal to 3 ('a','b','c', not counting '\0')
}
for each character
    if it is not 0
        increment x (where x is variable holding number of characters found)
    otherwise
        stop looking
return x
我想这里不太可能有人帮你做家庭作业

如果您被要求这样做,那么您的类可能已经涵盖了函数参数、指针和数组。所以我猜你是在问
const
const char*s
表示s指向
const char
,这表示不允许修改
char
。也就是说,以下行为是非法的:

unsigned len(const char *s) {
    *s = 'a'; // error, modifying a const char.
}
以下是编写函数所需的指针的基本知识。首先,在本例中,指针指向数组中的元素。即:

char A[] = {'a','b','c','\0'};

char const *s = &A[0]; // s = the address of A[0];
指针指向或引用
char
。要获取该
char
,请取消对指针的引用:

char c = *s;
// c is now equal to A[0]
由于
s
指向数组的一个元素,因此可以在指针上加减以访问数组的其他元素:

const char *t = s+1; // t points to the element after the one s points to.
char d = *t; // d equals A[1] (because s points to A[0])
还可以使用数组索引运算符:

char c = s[0]; // c == A[0]
c      = s[1]; // c == A[1]
c      = s[2]; // c == A[2]
您将如何使用递增索引顺序查看数组的每个元素


您提出的解决方案看起来应该可以正常工作。你得到4的结果只是巧合。你可能会得到任何结果。调用函数的方式存在问题:

unsigned len(const char* s);
const char k='m';
const char* s=&k;
cout << len(s) << endl;
你的意思是“数一数字符,直到找到“\0”吗? 如果是这样,您可以这样实现它:

int main() {
    char s[] = {'a','b','c','\0'};
    unsigned s_length = len(s);
    // s_length will be equal to 3 ('a','b','c', not counting '\0')
}
for each character
    if it is not 0
        increment x (where x is variable holding number of characters found)
    otherwise
        stop looking
return x

我也不打算给你写作业:p,但让我给你一些提示:它叫做“指针算术”。所以,指针是一个和它的名字一模一样的东西:指向内存“单元”的指针。正如您所知,内存中的所有变量都存储在“单元格”中,您可以通过地址引用这些单元格。C字符串存储在内存中的连续单元格中,因此例如“abc”类似于(编译器在定义带引号的字符串文字时添加“\0”):

还可以得到第一个字符的地址。现在,要获得“b”的地址,您可以简单地向s添加一个地址,如下所示:
(s+1)
。要获取s指向的单元格中的实际内容,应使用*运算符:
*s='a'
*(s+1)='b'
。这称为指针算术

注意:在这种情况下,向指针添加一个字符会转移到下一个单元格,因为char的长度是一个字节。如果定义一个指向更大结构的指针(
long int
,例如4个字节),添加一个指针将移动到内存中下一个结构开始的位置(如果
long int
,指针将移动+4个字节)


现在,这应该足以帮助您完成工作。

好的,我已经找到了我的答案,请检查我是否正确:

#include <iostream>
using namespace std;
unsigned len(const char*);
int main()
{
    const char* s = "Hello";
    cout << len(s) << endl;
    return 0;
}

unsigned len(const char* s)
{
    int count=0;; int i=0;
    while (*(s+i)!=0)
    {
        count++;
        i++;
    }
    return count;
}
#包括
使用名称空间std;
无符号len(const char*);
int main()
{
const char*s=“你好”;

这是否意味着
s
指向一个字符串(即一个字符序列,最后一个字符是空终止符“\0”)。您需要编写一个函数来查找该字符串的长度。我很想回答:
无符号len(const char*s){return strlen(s);}
谢谢karlphillip,但我不允许使用strlen这样的字符串函数:(我以为你不能,但我还是想回答它=变量I和计数是彼此重复的。另外,你的测试用例不是一个好的(因为单个字符的长度必须是1)。len(“m”)不过效果很好。我应该不用字符串来解决它,因为字符串在下一章中。你能为这个家庭作业编写代码吗?@陌生人家庭作业是为了让你为下一章做好准备。你一定已经学过数组,所以写一个函数,在数组中查找一个0元素。我真的知道如何使用数组等,但指针章节有点难。我真的不知道如何使用const char*s。如果你能给我看代码,我就能找到它。因为在下一个作业中,我应该做些什么。所以你能做这个作业吗:)?@陌生人,没有人会帮你做作业。只需在ar上迭代