在C ++中,我有一个名字很多的电话本,例如Sinatra,Frank,我希望用户能够输入任意长度的字符串来扫描文件。一旦我让用户输入任何所需长度的字符串,我如何扫描整个“Sinatra,Frank”字符串,仅用于“Frank”或“Sinatra”或“atra”,并查看它属于哪个名称?
答案 0 :(得分:6)
您可以使用std::string::find
方法:
string s = "Sinatra, Frank";
string::sizetype index = s.find("Frank");
这可以获得匹配的索引(在本例中为9)。
答案 1 :(得分:2)
一个问题:你的电话簿是一个平面文件,每个名字都在一个新行上(如你的例子中的“Sinatra,Frank”,格式如“姓氏,名字”等),或者你有一些结构吗?这个电话簿,其中每个名称字符串是一个数组的节点,一个链表等?
请注意,对于strstr():
strstr(const char *s1, const char *s2)
在s1中找到第一次出现的字符串s2,这对您来说已经足够了。
对于输入字符串,请务必以某种方式检查大小限制;如果用户通过某个界面输入字符串,则应明确处理该字符串以确保其不超过您的存储空间或包含恶意字符或代码。
Ken's solution生成原始字符串中子字符串的位置(只要它不是空的,意味着它有'命中'),但不告诉你电话簿的哪个条目是命中;您的代码需要跟踪哪些条目/条目是命中,这样您就可以返回一组有意义的结果。
答案 2 :(得分:1)
您可以使用strstr()
在字符串中找到一个子字符串。
答案 3 :(得分:0)
如果是std::string
,您可以使用“Sinatra,Frank”字符串的.find()
方法