查找字符串中的子字符串

问题描述:

在C++中,我有一个带有许多名字的电话簿,比如Sinatra,Frank,并且我希望用户能够输入任意长度的字符串来扫描文件。一旦我有用户输入任意长度的字符串,我该如何扫描整个字符串“Sinatra,Frank”为“Frank”或“Sinatra”或“atra”并查看它属于哪个名称?查找字符串中的子字符串

您可以使用strstr()在字符串中查找一个子字符串。

可以使用std::string::find方法:

string s = "Sinatra, Frank"; 
string::sizetype index = s.find("Frank"); 

这可以让你的比赛(在这种情况下是9)的指数。

如果它是一个std::string,您可以使用“西纳特拉,弗兰克”串

一个问题的.find()方法:是你的电话本,每个名字上一个新行平面文件(在你的榜样“ Sinatra,Frank“的格式,例如”Lastname,Firstname“等等),还是你有这个电话簿的一些结构,其中每个name-string是一个数组的节点,链表等等?

注意,对于的strstr():

strstr(const char *s1, const char *s2) 

位于字符串s2的S1中的第一次出现,这可能是足够的适合你。

对于您的输入字符串,请务必以某种方式检查大小限制;如果用户通过某个接口输入字符串,则应明确处理以确保它不超过您的存储空间或包含恶意字符或代码。

Ken's solution在原始字符串中产生子字符串的位置(只要它不是null,意味着有'hit'),但不会告诉你电话簿的哪个条目是命中;您的代码将需要跟踪哪些条目/条目已被点击,以便您可以返回一组有意义的结果。