带有可互换字母的字符串
Posted
技术标签:
【中文标题】带有可互换字母的字符串【英文标题】:String with an interchangeable letter 【发布时间】:2014-04-08 18:13:47 【问题描述】:我的作业方向如下:
返回字符串“hope”出现在给定字符串中的任何位置的次数,除了我们将接受任何字母作为“p”,因此“hode”和“hooe”计数。
我正在努力弄清楚如何使第三个字母等于任何内容,并且仍然让程序识别它是正确的。
到目前为止,我的代码显然是错误的,但仍然包含它。
一个大问题是我不能告诉数组检查它是否匹配字符串。
int wordsFunction(string words)
int num = 0;
for(int i = 0; i < words.length(); i++)
if(words[i] == "Hope" || words[i] == "hope")
num++;
return num;
main()
string words;
cout << "Enter a string: ";
getline(cin, words);
cout << wordsFunction(words);
【问题讨论】:
如果words
是 string
,words[i]
是 char
,您不能将它与 "hope"
的字符数组进行比较。查找子字符串“ho”,然后检查第 4 个字母是否为“e”。
您的代码不起作用。提示:您正在将变量与不兼容的(粗略近似:不同)类型进行比较。在 programmig 中,这就像比较苹果和香蕉。
【参考方案1】:
到目前为止,我的代码显然是错误的
确实如此。我不会解释为什么你的代码是错误的,直接去描述一个修复。
您的main
读取允许空格的字符串,这很好:您的代码的 I/O 部分不需要更改。
现在观察到要检测单词"ho*e"
,*
表示任何单个字符,在单词w
中的i
位置,您需要检查w[i]
是否是'h'
, w[i+1]
是 'o'
,w[i+3]
是 'e'
,并且索引 i+3
是有效的。这变成了一个简单的检查:
if (i+3 < w.size() && w[i] == 'h' && w[i+1] == 'o' && w[i+3] == 'e')
count++;
【讨论】:
很好。现在最好让这个程序案例(上下)证明。 @MudassirHussain OP 发布的代码表明"ho*e"
的第一个字母可能是大写的,但问题的文本不支持这一假设。当然,一个简单的解决方法是在搜索之前将w
转换为小写。
哇,谢谢你,这很有趣。很好的解释。以上是关于带有可互换字母的字符串的主要内容,如果未能解决你的问题,请参考以下文章