您好我想知道使字符串str1看起来等于字符串str2
的最短路径是什么str1 = "Front Space";
str2 = " Front Space";
/*Here is where I'm missing some code to make the strings equal*/
if (str1.compare(str2) == 0) { // They match
cout << "success!!!!" << endl; // This is the output I want
}
我需要str1等于str2 我该怎么办?
我做了多次尝试,但他们似乎都没有正常工作。我认为这是因为字符串中的字符数,即:str1的字符数少于str2。
for (int i = 1; i <= str1.length() + 1; i++){
str1[str1.length() - i ] = str1[str1.length() - (i + 1)];
}
任何帮助表示赞赏
答案 0 :(得分:5)
如果你可以使用Boost,可以在 boost / algorithm / string.hpp 中找到修剪功能
str1 = "Front Space";
str2 = " Front Space";
boost::trim_left( str2 ); // removes leading whitespace
if( str1 == str2 ) {
// ...
}
同样,trim
删除了前导和尾随空格。并且所有这些函数都有*_copy
对应函数,它们返回修剪后的字符串,而不是修改原始字符串。
如果您不能使用Boost,那么创建自己的trim_left
功能并不困难。
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
void trim_left( std::string& s )
{
auto it = s.begin(), ite = s.end();
while( ( it != ite ) && std::isspace( *it ) ) {
++it;
}
s.erase( s.begin(), it );
}
int main()
{
std::string s1( "Hello, World" ), s2( " \n\tHello, World" );
trim_left( s1 ); trim_left( s2 );
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
}
输出:
Hello, World
Hello, World
答案 1 :(得分:1)
正如其他人所说,你可以使用boost
。如果你不想使用boost
,或者你不能(可能是因为它是家庭作业),那么很容易使用ltrim函数。
string ltrim(string str)
{
string new_str;
size_t index = 0;
while (index < str.size())
{
if (isspace(str[index]))
index++;
else
break;
}
if (index < str.size())
new_str = str.substr(index);
return new_str;
}
答案 2 :(得分:1)
LLVM还为StringRef类提供了一些修剪成员函数。这可以在不修改你的字符串的情况下工作而不需要复制,以防对你很重要。
llvm::StringRef ref1(str1), ref2(str2);
ref1.ltrim();
ref2.ltrim();
if (ref1 == ref2) {
// match
}