【发布时间】:2026-02-08 22:15:01
【问题描述】:
我有一个字符串和一个关键字数组。如果字符串包含列表中的关键字之一,我想检查该关键字是否是该字符串的唯一元素。如果不是,我想返回一个错误。最后一件事,字符串总是以 \n 结尾。
我的关键字数组如下:
const char * keywordsTable[] =
{
"INIT",
"BEGIN",
"END",
"ROUTINES",
"ENDROUTINES",
"ENDWHEN",
"WHEN",
"WHILE"
};
例如,如果我的字符串是"BEGIN\n",那么一切都很好。如果我的字符串是"BEGIN FOO\n" 或"FOO BEGIN\n",我必须返回一个错误。最后,如果我的字符串是"BEGINFOO\n",一切都很好。 (错误码为1,否则为0)
我尝试了一些方法(我不知道如何进行):
int CheckKeyword(char * str)
{
int nKeywords = sizeof(keywordsTable) / sizeof(keywordsTable[0]);
char * strTok = NULL;
char * keywrdWithLF = malloc(20);
// I don't want to check for the last two keywords nor the first
for (int i = 1; i < nKeywords - 2; i++)
{
strcpy_s(keywrdWithLF, 20, keywordsTable[i]);
strcat_s(keywrdWithLF, 20, "\n");
strTok = strstr(str, keywrdWithLF);
// If my string contains a keyword
if (strTok != NULL)
{
// If the string contains other characters... and I'm stuck
if (strcmp(str, keywrdWithLF))
{
}
else
{
free(keywrdWithLF);
return 1;
}
}
}
free(keywrdWithLF);
return 0;
}
提前谢谢你(请不要抱怨我的缩进样式,我必须使用 Whitesmith 缩进)!
【问题讨论】:
-
好的,这里的问题是什么?
-
我写了我卡在代码里的地方
-
“我被卡住了”不是问题。究竟是什么问题?
-
我只是不知道如何继续......我会在问题中准确说明
-
在任何情况下它都比 strcpy() 更安全,并且可以更好地处理错误。无论如何,这不是我的问题