2

我正在尝试自己完成一本 o'reilly 教科书,但这些问题对我来说开始变得非常困难。我阅读了编程问题的每一页,所以我应该理解。但是有人可以解释这个问题的含义吗?“编写一个函数开始(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;
}
4

4 回答 4

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是 的前缀string2,什么时候string1不是 的前缀string2)和几个“角落案例”:

  • 第一个字符串是空的- return true,因为空字符串是任何字符串的前缀。
  • 第二个字符串为空-true当第一个字符串也为空时返回,false否则返回。
  • 第一个字符串比第二个字符串长false-即使您看到较短的第二个字符串和较长的“前缀”之间完全匹配,也会返回。
于 2013-05-29T16:27:39.333 回答
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;
}
于 2013-05-29T16:27:16.930 回答
2

我猜这意味着 string2 == string1 的开始。例如,如果string1是“foo”并且string2是“foobar”。

于 2013-05-29T16:27:49.557 回答
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;
}

这将检查 string 是否B匹配A从 position 开始的子字符串0

begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False
于 2013-05-29T16:30:24.620 回答