计算字符 S 的字节数
Counting Bytes Of Char S
我有作业,它是:
在下面编写函数的代码,这个函数应该计算 s 内的字节数,直到它不是 '\0'。
该函数:
unsigned len(const char* s);
真的不知道这个作业是什么意思,请问谁能写这个作业的代码?此外,任何人都可以解释一下"Const char* s"是什么意思吗?如果你能用一些例子来解释,那就完美了。
这是我正在尝试执行的代码:
unsigned len(const char* s)
{
int count=0;; int i=0;
while (*(s+i)!=0)
{
count++;
i++;
}
return count;
}
但是在主函数中我不知道我应该写什么,顺便说一句,我已经写了这个:
const char k='m';
const char* s=&k;
cout << len(s) << endl;
结果总是4!真的我不知道我应该怎么做这个问题,如果我只能在常量字符中存储一个字符,所以结果应该总是相同的。这个问题到底在寻找什么?
功课意味着你应该编写一个行为如下的函数:
int main() {
char s[] = {'a','b','c',' '};
unsigned s_length = len(s);
// s_length will be equal to 3 ('a','b','c', not counting ' ')
}
我认为不太可能有人会在这里为你做作业。
如果要求您这样做,则假定您的类已经涵盖了函数参数、指针和数组。所以我想你在问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',' '};
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 的原因只是巧合。你根本可能得到任何结果。调用函数的方式存在问题:
const char k='m';
const char* s=&k;
cout << len(s) << endl;
就是没有' '
保证在最后。你需要创建一个数组,其中一个元素是 0:
const char k[] = { 1,2,3,0};
const char* s = &k[0];
cout << len(s) << 'n'; // prints 3
char m[] = { 'a', 'b', 'c', 'd', ' ', 'e', 'f'};
cout << len(m) << 'n'; // prints 4
char const *j = "Hello"; // automatically inserts a ' ' at the end
cout << len(j) << 'n'; // prints 5
在 C(以及扩展C++(中,字符串可以表示为以空字符结尾的字符序列。 因此,字符串"abc"将表示为
'a', 'b', 'c', ' '
这意味着,您可以通过计算每个字符来获取 C 字符串的长度,直到遇到 null。 因此,如果您有一个以 null 结尾的const char*
字符串,您可以通过循环字符串并递增计数器变量直到找到"\0"字符来找出该字符串的长度。
这意味着你有一个字符串,比如hello world
每个字符串都以