A,B,C 和 结束符 '\0' 拢共 4 个字符,占用 4个字节
哪来的6个
所有字符串都有一个'\0'字符作为结束符标志
第一次看见这个问题时网上查找发现没有竟然没有C语言实现的代码
于是自己写了代码以及思路放到这里
思路:
使用三个for循环,第一个控制本次循环数组的开头;
第二个for循环控制本此循环数组的结尾
第三个for循环找到本此循环的不重复子字符串的长度并保存
直至将整个字符串便利后输出最大值
实现:
#include<stdio.h>
#include<string.h>
int main ()
{
char str[255];
gets(str);
int length=strlen(str);
int max=0;
int i,j,k,n;
for (i=0;i<length;i++)//字符串数组循环的头
{
for (j=i+1;j<length;j++)//字符串数组循环的尾
{
for (k=i;k<j;k++)//从本次字符串数组循环的头开始判断并找到相同字符时停止
{
if (str[k]==str[j])
{
n=j;//记录尾的值
j=length;
k=j;//和上条语句一起是本次循环停止
}
}
if (n-i>max)//记录最大的长度
max=n-i;
}
}
if (max == 0)//如果无重复max=length
max = length;
printf("%d\n",max);
return 0;
}
字符串“ABC”实际上占用的字节数是4个而不是6个的原因是因为在C语言中,字符串是以空字符'\0'作为字符串的结束标志的。所以字符串"ABC"实际上占用了4个字节,包括字符'A'、字符'B'、字符'C'以及结束标志'\0'。
下面是示例代码来展示字符串的内存分布和字符串长度的计算方法:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "ABC";
int length = strlen(str); // 计算字符串长度
printf("String: %s\n", str);
printf("Length: %d\n", length);
for (int i = 0; i < strlen(str); i++)
{
printf("Character %d: %c\n", i, str[i]);
}
return 0;
}
运行以上代码,输出如下:
String: ABC
Length: 3
Character 0: A
Character 1: B
Character 2: C
可以看到,字符串"ABC"的长度是3,分别是字符'A'、字符'B'和字符'C'。字符串的实际内存占用是4个字节,包括字符'A'、字符'B'、字符'C'以及结束标志'\0'。
在C语言中,字符串的长度可以通过strlen函数来计算。虽然表面上看起来字符'A'、字符'B'和字符'C'是占用了3个字节,但是strlen函数会遍历字符串,直到遇到结束标志'\0'为止,并返回遍历的字符个数。