在 C 中,如果我不想使用字符串函数,我可以使用什么来代替 strlen?
In C , what can I use instead of strlen if I don't want to use a string function?
我最近开始学习基本的 C,但我仍然对它一窍不通,我开始做一些学习项目,我正在使用库函数,但我对其他方法很感兴趣...
所以我有一个电子邮件验证,它工作正常,但我想在没有 strlen
的情况下进行验证,任何建议我可以做什么而不是 strlen
?
void mail(char e[]) {
int count = 0;
int countb = 0;
int i, j;
int t, t2;
int p = 0;
for (i = 0; i < strlen(e); i++) {
if (e[i] == '@') {
count++;
t = i;
}
}
if (count == 1) {
for (j = 0; j < t; j++) {
if (!(e[j] == '_' || e[j] == '.' || isalpha(e[j]) || isdigit(e[j]))) {
p = -1;
printf("\nwrong\n");
break;
}
}
if (p == 0) {
for (i = t; i < strlen(e); i++) {
if (e[i] == '.') {
t2 = i;
countb++;
}
}
if (countb == 1) {
for (i = 0; i < t2 && i > t2; i++) {
if (!(isalpha(e[i]))) {
p = -1;
printf("\nwrong\n");
break;
} else {
p = 1;
}
}
if (p == 1) {
if (e[t2 + 3] != '[=10=]') {
p = -1;
printf("\nwrong\n");
}
}
} else {
p =- 1;
printf("\nwrong\n");
}
}
} else {
p = -1;
printf("\nwrong\n");
}
return;
}
您可以创建自己的 my_strlen :)
unsigned int my_strlen(char *str)
或
当你的字符与'\0'(空字节)不同时,你可以循环。所以只需将 strlen(e)
替换为 e[i] != '[=12=]'
它应该工作得很好
你唯一能做的就是实现你自己的 strlen 函数。
在 C 语言中,字符串是以 null 结尾的字符数组,也就是说,数组的最后一个字符是 '\0'(零)。 strlen 函数遍历字符数组,直到找到空字符,它 returns 该数组的长度,不包括空字符。
要复制(创建)C 字符串,您必须执行以下操作:
char *str = malloc(strlen(another_string) + 1);
str[strlen(another_string)] = '[=10=]';
strlen 示例:
size_t my_strlen(const char *str)
{
if (!str) return 0;
size_t n = 0;
for (; *str; ++n, ++str);
return n;
}
您可以测试偏移量 i
处的字节是否不是空终止符,而不是比较 i < strlen(e)
:e[i] != '[=12=]'
.
您也可以在函数的开头只计算一次字符串的长度,并将其存储到 len
变量中。
我最近开始学习基本的 C,但我仍然对它一窍不通,我开始做一些学习项目,我正在使用库函数,但我对其他方法很感兴趣...
所以我有一个电子邮件验证,它工作正常,但我想在没有 strlen
的情况下进行验证,任何建议我可以做什么而不是 strlen
?
void mail(char e[]) {
int count = 0;
int countb = 0;
int i, j;
int t, t2;
int p = 0;
for (i = 0; i < strlen(e); i++) {
if (e[i] == '@') {
count++;
t = i;
}
}
if (count == 1) {
for (j = 0; j < t; j++) {
if (!(e[j] == '_' || e[j] == '.' || isalpha(e[j]) || isdigit(e[j]))) {
p = -1;
printf("\nwrong\n");
break;
}
}
if (p == 0) {
for (i = t; i < strlen(e); i++) {
if (e[i] == '.') {
t2 = i;
countb++;
}
}
if (countb == 1) {
for (i = 0; i < t2 && i > t2; i++) {
if (!(isalpha(e[i]))) {
p = -1;
printf("\nwrong\n");
break;
} else {
p = 1;
}
}
if (p == 1) {
if (e[t2 + 3] != '[=10=]') {
p = -1;
printf("\nwrong\n");
}
}
} else {
p =- 1;
printf("\nwrong\n");
}
}
} else {
p = -1;
printf("\nwrong\n");
}
return;
}
您可以创建自己的 my_strlen :)
unsigned int my_strlen(char *str)
或
当你的字符与'\0'(空字节)不同时,你可以循环。所以只需将 strlen(e)
替换为 e[i] != '[=12=]'
它应该工作得很好
你唯一能做的就是实现你自己的 strlen 函数。
在 C 语言中,字符串是以 null 结尾的字符数组,也就是说,数组的最后一个字符是 '\0'(零)。 strlen 函数遍历字符数组,直到找到空字符,它 returns 该数组的长度,不包括空字符。
要复制(创建)C 字符串,您必须执行以下操作:
char *str = malloc(strlen(another_string) + 1);
str[strlen(another_string)] = '[=10=]';
strlen 示例:
size_t my_strlen(const char *str)
{
if (!str) return 0;
size_t n = 0;
for (; *str; ++n, ++str);
return n;
}
您可以测试偏移量 i
处的字节是否不是空终止符,而不是比较 i < strlen(e)
:e[i] != '[=12=]'
.
您也可以在函数的开头只计算一次字符串的长度,并将其存储到 len
变量中。