C++ 一个字符串开始另一个字符串意味着什么?c++;
我正试图自己完成一本奥莱利的教科书,这些问题对我来说开始变得非常困难。我阅读了每一页,直到编程问题,所以我应该理解。但是有人能解释一下这个问题的意思吗?编写一个函数begins(string1,string2),如果string1开始string2,则返回true。编写一个程序来测试该函数 让我们从我所知道的开始,我知道如何创建函数并在main中调用它。我不知道的是,一根弦开始另一根弦意味着什么,我甚至不知道该怎么做。解释一下就好了。如果您为示例提供了任何代码,请不要回答整个函数或程序。我真的在努力学习,我想自己完成这个项目。谢谢C++ 一个字符串开始另一个字符串意味着什么?c++;,c++,string,C++,String,我正试图自己完成一本奥莱利的教科书,这些问题对我来说开始变得非常困难。我阅读了每一页,直到编程问题,所以我应该理解。但是有人能解释一下这个问题的意思吗?编写一个函数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 Yourmain
函数忽略begins(a,b)的返回值
。在栏周围需要一个if
语句
begins("Hello World", "Hello") -> True
begins("Hello World", "Goodbye World") -> False