在 C++ 中反转字符串
Reversing a string in c++
我刚开始学习 C++,我试图创建一个使用函数来反转字符串的简单程序,但这是我的尝试,但它似乎没有用。它只是以正确的方式输出字符串。只是为了澄清,我不是在寻找内置函数或类似的东西,而是在寻找我的逻辑中的错误。如果它有一个功能,我很想知道。感谢您的帮助。
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = userInputStr;
reverseString(userInputStr, reversedString);
cout << userInputStr << " reversed is " << reversedString;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 0; counter >= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
感谢所有提供帮助的人。对于那些感兴趣的人,我设法修复的更新代码是 below.I 知道有更简单的方法可以做到这一点,但我只学习了几天,所以这只是使用什么我目前明白了。
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = "";
reverseString(userInputStr, reversedString);
cout << userInputStr << " reversed is " << reversedString << endl;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 0; counter < lengthOfString +1; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
您的 for 循环必须从 1 开始:
for (counter = 1; counter <= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
此外,您输入的字符有误:“>”而不是“<”。我也不知道你为什么设置输出字符串等于输入字符串?
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = "";
reverseString(userInputStr,reversedString);
cout << userInputStr << " reversed is " << reversedString;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 1; counter <= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
这是提供结果的ideone:http://ideone.com/47A3y1
学习 C++ 也是为了学习语言和标准库可以为您做什么。例如,学习可以从两个迭代器构建一个字符串,并且存在反向迭代器:
string reversedString(userInputStr.rbegin(), userIntput.rend());
1 - output
包含开始反转时的文本。您可能希望按照
的行访问 output
中的元素
output[counter] = input[opposite];
除了修复循环条件。
2 - 使用字符串类型实现函数的合理方法可能是。
std::string reverse(const std::string& in){
return std::string(in.rbegin(), in.rend());
}
在这个循环中
for (counter = 0; counter >= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
有几个错误。
第一个是循环永远不会迭代,除非字符串输入为空且因此其长度等于零。只有在这种情况下条件
counter >= lengthOfString
将被评估为真。
第二个问题是索引评估像
(lengthOfString - counter)
当计数器等于0时,将超出索引的有效范围。
最后你已经在调用这个函数时用输入字符串初始化了输出
string reversedString = userInputStr;
reverseString(userInputStr, reversedString);
下面这样声明函数会更好
string reverseString( const string& input );
它可以被定义为
string reverseString( const string& input )
{
return std::string( input.rbegin(), input.rend() );
}
函数的主要调用方式如下
string reversedString = reverseString(userInputStr );
如果你想在不使用反向迭代器的情况下编写函数,那么你可以这样写
string reverseString( const string& input )
{
std::string output;
auto n = input.size();
output.reserve( n );
while ( n != 0 )
{
output += input[--n];
}
return output;
}
for (counter = 0; counter >= lengthOfString; counter++)
这将创建一个循环,当计数器大于或等于字符串的长度时运行,因为计数器最初等于 0,这意味着它永远不会运行。
使 counter < lengthOfString
对您不起作用的原因是 .length()
return 是字符串中的字符数。因此 5 个字符的字符串 returns 5,有效索引为 0-4。所以你需要开始看 lengthOfString-counter-1
以确保当 counter=0
你真的在看最后一个字符。
您实际上可能正在使用当前代码复制字符串末尾的 NULL 字符,这意味着 return 字符串的第一个字符是 [=15=]
,这就是为什么字符串看起来是空的。
我刚开始学习 C++,我试图创建一个使用函数来反转字符串的简单程序,但这是我的尝试,但它似乎没有用。它只是以正确的方式输出字符串。只是为了澄清,我不是在寻找内置函数或类似的东西,而是在寻找我的逻辑中的错误。如果它有一个功能,我很想知道。感谢您的帮助。
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = userInputStr;
reverseString(userInputStr, reversedString);
cout << userInputStr << " reversed is " << reversedString;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 0; counter >= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
感谢所有提供帮助的人。对于那些感兴趣的人,我设法修复的更新代码是 below.I 知道有更简单的方法可以做到这一点,但我只学习了几天,所以这只是使用什么我目前明白了。
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = "";
reverseString(userInputStr, reversedString);
cout << userInputStr << " reversed is " << reversedString << endl;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 0; counter < lengthOfString +1; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
您的 for 循环必须从 1 开始:
for (counter = 1; counter <= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
此外,您输入的字符有误:“>”而不是“<”。我也不知道你为什么设置输出字符串等于输入字符串?
#include <iostream>
#include <string>
// A program to practice creating and calling a function to reverse a string
using namespace std;
//declaring the function before use
string reverseString(const string& input,string& output);
//main function
int main()
{
string userInputStr;
cout << "Please enter a string to be reversed: ";
getline(cin,userInputStr);
string reversedString = "";
reverseString(userInputStr,reversedString);
cout << userInputStr << " reversed is " << reversedString;
return 0;
}
string reverseString(const string& input, string& output)
{
char characterInString;
int counter;
int lengthOfString = input.length();
for (counter = 1; counter <= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
return output;
}
这是提供结果的ideone:http://ideone.com/47A3y1
学习 C++ 也是为了学习语言和标准库可以为您做什么。例如,学习可以从两个迭代器构建一个字符串,并且存在反向迭代器:
string reversedString(userInputStr.rbegin(), userIntput.rend());
1 - output
包含开始反转时的文本。您可能希望按照
output
中的元素
output[counter] = input[opposite];
除了修复循环条件。
2 - 使用字符串类型实现函数的合理方法可能是。
std::string reverse(const std::string& in){
return std::string(in.rbegin(), in.rend());
}
在这个循环中
for (counter = 0; counter >= lengthOfString; counter++)
{
characterInString = input[(lengthOfString - counter)];
output = output + characterInString;
}
有几个错误。
第一个是循环永远不会迭代,除非字符串输入为空且因此其长度等于零。只有在这种情况下条件
counter >= lengthOfString
将被评估为真。
第二个问题是索引评估像
(lengthOfString - counter)
当计数器等于0时,将超出索引的有效范围。
最后你已经在调用这个函数时用输入字符串初始化了输出
string reversedString = userInputStr;
reverseString(userInputStr, reversedString);
下面这样声明函数会更好
string reverseString( const string& input );
它可以被定义为
string reverseString( const string& input )
{
return std::string( input.rbegin(), input.rend() );
}
函数的主要调用方式如下
string reversedString = reverseString(userInputStr );
如果你想在不使用反向迭代器的情况下编写函数,那么你可以这样写
string reverseString( const string& input )
{
std::string output;
auto n = input.size();
output.reserve( n );
while ( n != 0 )
{
output += input[--n];
}
return output;
}
for (counter = 0; counter >= lengthOfString; counter++)
这将创建一个循环,当计数器大于或等于字符串的长度时运行,因为计数器最初等于 0,这意味着它永远不会运行。
使 counter < lengthOfString
对您不起作用的原因是 .length()
return 是字符串中的字符数。因此 5 个字符的字符串 returns 5,有效索引为 0-4。所以你需要开始看 lengthOfString-counter-1
以确保当 counter=0
你真的在看最后一个字符。
您实际上可能正在使用当前代码复制字符串末尾的 NULL 字符,这意味着 return 字符串的第一个字符是 [=15=]
,这就是为什么字符串看起来是空的。