2013-11-02 177 views
1

我搜索了很多,但找不到处理以下情况的最佳方法。C - 在格式化字符串中查找子字符串

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

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的用户名...

+0

告诉我们你的企图..! – Anirudha

+0

我更新了我的问题! –

+0

浏览string.h函数并找到您的解决方案。 – zubergu

回答

1

虽然没有标准的方式,也当然是一个简单的解决办法:如果你有你的确切格式字符串,就足够了格式化两部分组成的串一样串的前缀被搜索,然后比较使用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); 
+0

谢谢!我试图分裂的文件串入变量进行比较的用户名和PW。我喜欢你的更好的解决方案:结合用户名和PW成一个字符串,然后比较文件串! –

0

您可以使用strstr找到一个子。或者您可以使用sscanf解析字符串(这是不是使用strtok)和strcmp来验证用户确实输入有效的用户名和密码(即其中用户输入的用户类型,或者只名或密码,甚至一些坏的部分检测情况作为'用户名,密码')