字符串中的字符与C中的一组字符的比较
我一直在从事一个需要验证字符串中字符的项目 比如说,我的一组有效字符是'abcde',其中所有字符启动不同的函数 首先,代码要求用户输入。之后,将其与该集合进行比较,以检查是否存在任何无效输入(除字符串中的字符与C中的一组字符的比较,c,string,C,String,我一直在从事一个需要验证字符串中字符的项目 比如说,我的一组有效字符是'abcde',其中所有字符启动不同的函数 首先,代码要求用户输入。之后,将其与该集合进行比较,以检查是否存在任何无效输入(除abcde之外的任何字母)。在此之后,角色启动各自的功能 我理解,可以通过以下方式实现: for (i = 0; i <= sizeof(string) - 1; i++) { if (string[i] != 'a' || string[i] != 'b' || stri
abcde
之外的任何字母)。在此之后,角色启动各自的功能
我理解,可以通过以下方式实现:
for (i = 0; i <= sizeof(string) - 1; i++) {
if (string[i] != 'a' || string[i] != 'b' || string[i] != 'c' ||
string[i] != 'd' || string[i] != 'e') {
printf("Invalid Input");
}
}
for(i=0;iEDIT):由于有评论指出标准的strspn()
函数已经从我的雷达上消失了,我们可以这样实现它:
const size_t num_valid = strspn(string, "abcde");
if(string[num_valid] != '\0')
printf("Invalid input: '%s'\n", string + num_valid);
这很好,因为它将循环从用户代码中推出,从而降低了复杂性
起初,我声称这是[strchr()
]的典型情况
(),我仍然认为:
for(size_t i = 0; string[i] != '\0'; ++i)
{
if(strchr("abcde", string[i]) == NULL)
{
printf("Invalid input: '%c'\n", string[i]);
break;
}
}
你的方式是非常理想的,尽管你可以考虑使用<代码> StrCHR 。<强>不要< /强>通过写表面华丽的<>代码>(String [i] < A′字符串[i]>E)< /p> >,以牺牲可移植性。
我对
sizeof(string)-1有更多问题。如果string
已衰减为指针,则sizeof(string)
不会给出元素的数量。此外,sizeof
返回一个无符号
类型,-1
可以将您推过零到最大大小
值
改为使用预先计算的strlen
。听起来您可以使用strpbrk
函数,该函数完全满足您的需要:从字符列表中查找任何字符的第一个匹配项。例如:
#include <string.h>
#include <stdio.h>
int main()
{
const char STR_VALID[] = "abcde";
char data[] = "invalid code";
for(char* ptr=strpbrk(data, STR_VALID); ptr!=NULL; ptr=strpbrk(ptr+1, STR_VALID))
{
putc(*ptr, stdout);
}
}
对于您的用例,最简单的解决方案是对标准但很少使用的库函数的一次调用strspn()
:
strspn()
如果string
与“abcde”中的一个字符匹配,则计算开始处的字符数i
是与a
、b
、c
、d
和e
中任何一个都不匹配的第一个字符的偏移量。如果它不是字符串的结尾,则输入无效
请注意,问题中的代码有一些问题:
- 循环测试
iif(string[i]<'a'| | string[i]>'e'){/*error*/}
同样,你的意思是在if语句中使用&&
而不是|
吗?在有效字符的静态常量数组中搜索字符,例如“abcde”。for语句应该是size\t len=strlen=strlen(string);for(i=0;i
因为sizeof
会给你4或8个指针大小的判断。谢谢,愚蠢的错误。我没有索引就重写了它。我也会提供索引驱动的。我们有一个1次重复操作。指针版本会让他们大吃一惊。它不应该是strchr(“abcde”,*string)吗
?@MananVora这可能是因为string
是本地作用域中的一个实际数组。我将再次写入。:)实际上有一个更简单的解决方案:这个问题是strspn()
的一个典型用例。如果它是指针,它的大小会是什么?出于好奇问一下,大小会有多大变化?@turmuka:如果string
是指针,那么sizeof(string)
与sizeof(char*)
相同,它将是平台上的char*
指针类型的大小。
adcde
size_t i = strspn(string, "abcde");
if (string[i] != '\0') {
printf("Invalid input: '%c'\n", string[i]);
}
for (i = 0; string[i] != '\0'; i++)