我正试图自己完成一本o'reilly教科书,问题开始变得非常困难。我阅读每一页都有编程问题所以我应该理解。但有人可以解释这个问题意味着什么吗? “编写一个函数begin(string1,string2),如果string1开始为string2,则返回true。编写一个程序来测试函数”
让我从我所知道的开始,我知道如何创建一个函数并在main中调用它。我不知道的是字符串开始另一个字符串意味着什么,我甚至会怎么做。解释会很好。如果您提供任何代码示例,请不要回答整个功能或程序。我真的很想学习,并希望自己完成这个项目。感谢。
感谢帮助人员,但现在,我在尝试运行程序时遇到了问题。我为string1键入“hel”,为string2键入“hello”。有什么建议吗?
#include <iostream>
#include <string>
std::string string1;
std::string string2;
bool begins(std::string string1, std::string string2);
int main()
{
std::cout << "Please enter two strings: ";
std::getline(std::cin, string1);
std::getline(std::cin, string2);
begins(string1, string2);
std::cout << string1 << "begins" << string2;
return 0;
}
bool begins(std::string string1, std::string string2)
{
if (begins(string1, string2) == true)
return true;
else
return false;
}
答案 0 :(得分:3)
字符串开始另一个字符串是另一种说法,字符串是另一个字符串的前缀。以下是一个示例:hell
是hello
的前缀。
检查算法相对简单:开始逐个字符地比较字符串,直到(1)候选前缀字符串结束,或(2)找到差异。如果前缀在您找到差异之前结束,请返回true
;否则,请返回false
:
bool begins(std::string string1, std::string string2)
{
if (string1.size() > string2.size) return false;
for (int i = 0 ; i != string1.size() ; i++) {
if (string1[i] != string2[i]) {
return false;
}
}
return true;
}
测试此功能应该检查两个“主流”情况(即string1
是[{1}}的前缀,而string2
不是string1
的前缀)和几个“角落案件”:
string2
,因为空字符串是任何字符串的前缀。true
,否则返回true
。false
即使您看到较短的第二个字符串与较长的“前缀”之间存在完全匹配。答案 1 :(得分:2)
字符串"Hell"
开始字符串"Hello World"
。
因此,此代码段应在两个语句中打印出"This is correct"
消息。
if (begins("Hell", "Hello World") == true) {
cout << "This is correct" << endl;
}
if (begins("globe", "Hello World") == false) {
cout << "This is also correct" << endl;
}
答案 2 :(得分:2)
我猜这意味着string2 == string1的开头。例如,如果string1
为“foo”且string2
为“foobar”。
答案 3 :(得分:1)
在C ++中,字符串只是一个字符数组。
| H | E | L | L | O | | W | O | R | L | D | \0 |
上面是一个代表"Hello World"
的字符串。
有问题的功能可以做这样的事情
bool begins(std::string A, std::string B)
{
return A.substr(0, B.length()) == B;
}
这将检查字符串B
是否与位置A
开始的0
子字符串匹配。
begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False