我在翻转数字1和2的字符串时遇到问题。
任何人都可以据此提出建议吗?
我正在尝试使用tempholder1和tempholder2作为函数变量并通过for循环进行反转。
我#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>
using namespace std;
/* GLOBAL DECLARATIONS */
/* FUNCTIONS */
// Reverse the string
void reverseString(string&);
// Transfer all the digits in a char array to an integer array
// Add two long integers
// Print out the long integers
int main()
{
string digit1, digit2;
char again; // Y for menu
do
{
// Fetch Values
cout << "Enter a string of digits: ";
cin >> digit1;
cout << "Enter a string of digits: ";
cin >> digit2;
// Reverse the string
reverseString(digit1);
reverseString(digit2);
cout << digit1 << digit2;
// Return sum of both values
cout << "The sum is: ";
// Do it again?
cout << "Continue (Y/N)?: ";
cin >> again;
} while ((again=='y')||(again=='Y'));
}
// Reverse the string
void reverseString(string& digit)
{
string tempholder1;
// tempholder1 = reverse of digit1
int k=0;
for(int i=digit.length()-1;i>=0;i--)
{
tempholder1[k]=digit[i];
k++;
}
digit=tempholder1;
}
为提高效率而编辑
Parallel.Invoke(() => Index(), () => helperCodes.dirs());
答案 0 :(得分:1)
在你的reverseString函数中,你没有初始化你的字符串变量,因为它可以存储的字符大小是多少?然后当你通过访问该字符串的各个元素时,如果tempholder1只有1的长度怎么办?您不能只访问第二个索引并进行更改(因为它可能无效),您可以编写如下内容的原因:
myString = "SomeReallyLongString";
是因为写入字符串operator =以增加它存储的字符数。
所以在你的功能中
// Reverse the string
void reverseString(string& digit)
{
// Uninitialized variables are really bad!!! always always initialize
// string tempholder1;
string temphold = digit;
// tempholder1 = reverse of digit1
int k=0;
for(int i=digit.length()-1;i>=0;i--)
{
temphold[k]=digit[i];
k++;
}
digit=temphold;
}
答案 1 :(得分:0)
您的实现中的主要问题是您忘记在时间字符串中分配内存,因此它没有您期望的大小。
就地逆转怎么样?你应该避免使用与时间字符串相关的所有内容(副本,附加内存......)
void reverseString(std::string& str)
{
const size_t n = str.length();
for (size_t i = 0; i < n / 2; ++i) {
std::swap(str[i], str[n - i - 1]);
}
}
答案 2 :(得分:-1)
反转我会做的字符串:
std::string name{"Hello World"};
for(auto i = name.rbegin(); i != name.rend(); ++i){
std::cout << *i;
}
//Output: dlroW olleH