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

C++ 一个字符串开始另一个字符串意味着什么?c++;,c++,string,C++,String,我正试图自己完成一本奥莱利的教科书,这些问题对我来说开始变得非常困难。我阅读了每一页,直到编程问题,所以我应该理解。但是有人能解释一下这个问题的意思吗?编写一个函数begins(string1,string2),如果string1开始string2,则返回true。编写一个程序来测试该函数 让我们从我所知道的开始,我知道如何创建函数并在main中调用它。我不知道的是,一根弦开始另一根弦意味着什么,我甚至不知道该怎么做。解释一下就好了。如果您为示例提供了任何代码,请不要回答整个函数或程序。我真的在

我正试图自己完成一本奥莱利的教科书,这些问题对我来说开始变得非常困难。我阅读了每一页,直到编程问题,所以我应该理解。但是有人能解释一下这个问题的意思吗?编写一个函数begins(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;
字符串
“地狱”
开始字符串
“你好世界”

因此,此代码段应在两条语句中打印出
“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;
}
if(开始(“地狱”、“你好世界”)==true){

coutString开始另一个String是表示字符串是另一个字符串的前缀的另一种方式。下面是一个示例:
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
的前缀时)和几个“角落情况”:

  • 第一个字符串为空-返回
    true
    ,因为空字符串是任何字符串的前缀
  • 第二个字符串为空-当第一个字符串也为空时返回
    true
    ,否则返回
    false
  • 第一个字符串比第二个字符串长-返回
    false
    ,即使您看到较短的第二个字符串和较长的“前缀”完全匹配

我想这意味着String 2= = String 1的开始。例如,如果<代码> String 1是“Foo”,而<>代码> String 2是“FooBar”。C++中的

< P>字符串只是字符数组。

| 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
是否匹配从位置
0
开始的
a
子字符串

begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False

我想他漏掉了一个单词。“…如果string1以string2开头,则返回true”听起来函数希望您查看string1是否以“string2”开头。但这只是一个猜测。strstrstr()这是一个C函数,但一旦你习惯了这门语言,就可以轻松地直接完成。@BagelzoneHa'bonè也许这本教科书缺了一个词。但我的措辞和书中的措辞完全一样。现在你需要实现
开始
,而不调用
开始
。看看我的答案或者是对算法的简短描述(我故意没有编写任何代码来避免“破坏者”).谢谢你的解释,伙计。我从来没想过这是什么意思。但是现在,我的代码中有一个问题,它运行不正常。有什么建议吗?谢谢伙计,所以实现要做的是检查每个字符,如果字符串1中的每个字符都不在字符串2中,它将返回一个假值?@MauriceAbney是的,如果ny字符是不同的,那么
string1
不是
string2
的前缀。如果循环结束而没有返回,那么
string1
已经结束而没有发现差异,因此我们可以返回
true
。我相信我可能遇到了问题。虽然我的代码现在运行,但它接受任何字符串并表示它开始s任意字符串。即我知道的“TheBegins cow”为false。我的主函数或begins的实现是否有问题?能否尝试运行它以查看是否遇到相同的问题?@Mauriciabney Your
main
函数忽略
begins(a,b)的返回值
。在
栏周围需要一个
if
语句
begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False