【发布时间】:2011-07-13 21:17:12
【问题描述】:
在 C++ 中,我有一个电话簿,上面有很多名字,比如 Sinatra、Frank,我希望用户能够输入任意长度的字符串来扫描文件。一旦我让用户输入了任何所需长度的字符串,我如何扫描整个“Sinatra,Frank”字符串以查找“Frank”或“Sinatra”或“atra”,并查看它属于哪个名称?
【问题讨论】:
在 C++ 中,我有一个电话簿,上面有很多名字,比如 Sinatra、Frank,我希望用户能够输入任意长度的字符串来扫描文件。一旦我让用户输入了任何所需长度的字符串,我如何扫描整个“Sinatra,Frank”字符串以查找“Frank”或“Sinatra”或“atra”,并查看它属于哪个名称?
【问题讨论】:
一个问题:您的电话簿是一个平面文件,每个名称都在一个新行上(如您的示例中的“Sinatra,Frank”,格式为“Lastname,Firstname”等),还是您有一些结构这个电话簿的每个名称字符串是一个数组的一个节点,一个链表等?
注意,对于 strstr():
strstr(const char *s1, const char *s2)
在 s1 中定位字符串 s2 的第一次出现,这对你来说可能就足够了。
对于您的输入字符串,请务必以一种或另一种方式检查大小限制;如果用户通过某个接口输入了一个字符串,则应该对其进行显式处理,以确保它不会超出您的存储空间或包含恶意字符或代码。
Ken's solution 产生子字符串在原始字符串中的位置(只要它不为空,就意味着有一个“命中”),但不会告诉您电话簿的哪个条目是命中的;您的代码将需要跟踪哪些条目/条目是命中的,以便您可以返回一组有意义的结果。
【讨论】:
如果是std::string,可以使用“Sinatra,Frank”字符串的.find()方法
【讨论】:
您可以使用std::string::find 方法:
string s = "Sinatra, Frank";
string::sizetype index = s.find("Frank");
这将为您获取匹配的索引(在本例中为 9)。
【讨论】:
您可以使用strstr() 定位字符串中的一个子字符串。
【讨论】: