gpt4 book ai didi

C - 在格式化字符串中查找子字符串

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:25 25 4
gpt4 key购买 nike

我搜索了很多,但找不到处理以下情况的最佳方法。

我有一个这样格式化的字符串数组:

username, password, usertype

例如,

joseph, secret, user

(数组最初是从文件加载的)。

我想获取用户输入(仅usernamepassword)并与数组中的所有字符串进行比较以查看是否存在匹配项。

例子

user input - (username) joseph     (password) secret
-> matches joseph, secret, user

我尝试使用子字符串和 strtok...在 C 中有解决这个问题的标准方法吗?

使用strstr

/* Search users */
for (i = 0; i < n_users; i++) {
if(strstr(users[i], username) != NULL) {
printf("\t! Found user at %d\n", i);
break;
}
}

这不太对,因为如果用户名是 Bobby,那么 by 将返回 true...

最佳答案

虽然没有标准方法,但肯定有一个简单的解决方案:如果您的字符串格式完全相同,那么将两部分字符串的格式设置为与正在搜索的字符串的前缀相同就足够了,然后比较使用 strstr 子字符串,并验证从 strstr 返回的结果是否与第一个字符串匹配。

下面是如何创建用于搜索的字符串:

int len = strlen(username)+strlen(passwd)+3; // space, comma, and \0
char *cmpString = malloc(len);
sprintf(cmpString, "%s, %s", username, passwd);
for (i = 0; i < n_users; i++) {
if(strstr(users[i], cmpString) == users[i]) { // cmpString is a prefix
printf("\t! Found user at %d\n", i);
break;
}
}
free(cmpString);

关于C - 在格式化字符串中查找子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com