不使用反向函数反转字符串C ++

时间:2017-04-25 12:36:29

标签: c++ string

我在翻转数字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());

3 个答案:

答案 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