在 C 中,如何检查从文件中读取的字符串是否包含 10 位数字。我用过 strspn ,它似乎工作,但我认为有更好的方法。非常感谢任何帮助。
char cset[] = "1234567890";
do
{
// read line into line_string
} while (strspn(line_string, cset) != 10);
在 C 中,如何检查从文件中读取的字符串是否包含 10 位数字。我用过 strspn ,它似乎工作,但我认为有更好的方法。非常感谢任何帮助。
char cset[] = "1234567890";
do
{
// read line into line_string
} while (strspn(line_string, cset) != 10);
有一个更简单的方法,使用 string.h 库
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char string[] = "0123456789";
int stringLength = strlen(string);
printf("%d\n", stringLength);
return 0;
}
它应该工作。你确定你没看错line_string
?
char cset[] = "1234567890";
char line[] = "9846578497";
printf("%d", strspn(line, cset));
输出10
。显式检查每个字符的简单循环也非常简单:
int i, digits = 0;
for (i = 0; line[i] != '\0'; ++i) // <-- make sure line is null-terminated
if (isdigit(line[i])) digits++;
printf("%d", digits);
是的,有很多有效的方法,但这取决于您将如何在程序中使用它们。有一些命令取决于您的使用环境,您可以阅读“strncmp”和“strstr”。如果你想在行首比较字符串,你可以使用,strncmp 这里是例子。
#define VALID_STRING " <project"
#define COMPARELIMIT 10
if(!strncmp(linebuffer, VALID_STRING, COMPARELIMIT)) {
// your code goes here
}
else {
}
如果您想在行缓冲区中的任何其他点进行比较,请使用“strstr”
#define CHECK_STRING "name="
char *start=NULL;
start=strstr(linebuffer, CHECK_STRING);
// it returns the address pointing to the first character of that(CHECK_STRING) string any where in linebuffer.
这取决于你想要什么。
让我们假设一堆不同的输入。为此,我们有:
char cset[] = "1234567890";
char str1[] = "5319764208"; /* all digits in different order */
strspn(str1, cset); /* returns 10 */
char str2[] = "098765432"; /* not all digits present */
strspn(str2, cset); /* returns 9 */
char str3[] = "not098a7654num321"; /* not a number, but has all digits */
strspn(str3, cset); /* returns 0 */
char str4[] = "blah 1234567890 blah"; /* all digits in same order plus chars */
strspn(str4, cset); /* returns 0 */
因此,这取决于您希望接受的输入是什么。