如何在不使用 strlen 的情况下计算字符串的字符数
How to count number characters of strings without using strlen
我的任务是计算随机单词中的字母数,直到输入 "End"。我不允许使用 strlen();功能。这是我目前的解决方案:
#include <stdio.h>
#include <string.h>
int stringLength(char string[]){
unsigned int length = sizeof(*string) / sizeof(char);
return length;
}
int main(){
char input[40];
while (strcmp(input, "End") != 0) {
printf("Please enter characters.\n");
scanf("%s", &input[0]);
while (getchar() != '\n');
printf("You've entered the following %s. Your input has a length of %d characters.\n", input, stringLength(input));
}
}
stringLength 值不正确。我做错了什么?
请注意 sizeof
是在 编译时 求值的。所以不能用运行时间.
来判断一个字符串的长度
字符串的长度是遇到空字符之前的字符数。因此,字符串的大小比字符数多一个。这个最后的空字符称为终止空字符。
所以要在 运行 时间内知道字符串的长度,你必须计算字符数,直到遇到空字符。
用 C 语言编程很简单;这个交给你了。
%n
说明符也可用于捕获字符数。
使用 %39s
将防止将太多字符写入数组 input[40]
.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( void)
{
char input[40] = {'[=10=]'};
int count = 0;
do {
printf("Please enter characters or End to quit.\n");
scanf("%39s%n", input, &count);
while (getchar() != '\n');
printf("You've entered the following %s. Your input has a length of %d characters.\n", input, count);
} while (strcmp(input, "End") != 0);
return 0;
}
编辑以更正@chux 指出的缺陷。
使用 " %n
记录前导 space 和 %n"
记录总字符数 这应该记录前导白色的数量 space 和解析的总字符数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( int argc, char *argv[])
{
char input[40] = {'[=11=]'};
int count = 0;
int leading = 0;
do {
printf("Please enter characters. Enter End to quit.\n");
if ( ( scanf(" %n%39s%n", &leading, input, &count)) != 1) {
break;
}
while (getchar() != '\n');
printf("You've entered %s, with a length of %d characters.\n", input, count - leading);
} while (strcmp(input, "End") != 0);
return 0;
}
编辑stringLength()
函数到return长度
int stringLength(char string[]){
unsigned int length = 0;
while ( string[length]) {// true until string[length] is '[=12=]'
length++;
}
return length;
}
我的任务是计算随机单词中的字母数,直到输入 "End"。我不允许使用 strlen();功能。这是我目前的解决方案:
#include <stdio.h>
#include <string.h>
int stringLength(char string[]){
unsigned int length = sizeof(*string) / sizeof(char);
return length;
}
int main(){
char input[40];
while (strcmp(input, "End") != 0) {
printf("Please enter characters.\n");
scanf("%s", &input[0]);
while (getchar() != '\n');
printf("You've entered the following %s. Your input has a length of %d characters.\n", input, stringLength(input));
}
}
stringLength 值不正确。我做错了什么?
请注意 sizeof
是在 编译时 求值的。所以不能用运行时间.
字符串的长度是遇到空字符之前的字符数。因此,字符串的大小比字符数多一个。这个最后的空字符称为终止空字符。
所以要在 运行 时间内知道字符串的长度,你必须计算字符数,直到遇到空字符。
用 C 语言编程很简单;这个交给你了。
%n
说明符也可用于捕获字符数。
使用 %39s
将防止将太多字符写入数组 input[40]
.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( void)
{
char input[40] = {'[=10=]'};
int count = 0;
do {
printf("Please enter characters or End to quit.\n");
scanf("%39s%n", input, &count);
while (getchar() != '\n');
printf("You've entered the following %s. Your input has a length of %d characters.\n", input, count);
} while (strcmp(input, "End") != 0);
return 0;
}
编辑以更正@chux 指出的缺陷。
使用 " %n
记录前导 space 和 %n"
记录总字符数 这应该记录前导白色的数量 space 和解析的总字符数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( int argc, char *argv[])
{
char input[40] = {'[=11=]'};
int count = 0;
int leading = 0;
do {
printf("Please enter characters. Enter End to quit.\n");
if ( ( scanf(" %n%39s%n", &leading, input, &count)) != 1) {
break;
}
while (getchar() != '\n');
printf("You've entered %s, with a length of %d characters.\n", input, count - leading);
} while (strcmp(input, "End") != 0);
return 0;
}
编辑stringLength()
函数到return长度
int stringLength(char string[]){
unsigned int length = 0;
while ( string[length]) {// true until string[length] is '[=12=]'
length++;
}
return length;
}