字符串开始另一个字符串意味着什么? C ++

时间:2013-05-29 16:24:28

标签: c++ string

我正试图自己完成一本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;
}

4 个答案:

答案 0 :(得分:3)

字符串开始另一个字符串是另一种说法,字符串是另一个字符串的前缀。以下是一个示例:hellhello的前缀。

检查算法相对简单:开始逐个字符地比较字符串,直到(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