尝试反转C字符串

问题描述 投票:2回答:1

除了strlen(),我不能使用任何c函数,也不能使用字符串。我来这里已经很不幸了。我不断收到奇怪的字符作为输出的一部分。即问号和本质上很奇怪的替代代码就是它的样子。

#include <iostream>
#include <cstring>

using namespace std;

int lastIndexOf(const char*, char[]);
void reverse(char*);
int replace(char*, char, char);

int main() {
  int i = 0, count = 0, counter = 0, SIZE = 100;
  char charArray[SIZE];
  cout << "Enter a string of no more than 50 characters: ";
  cin.getline(charArray, SIZE);
  reverse(charArray);
}

void reverse(char s[])
{
  int n = 100;

  for (int i = 0; i < n / 2; i++) {
    swap(s[i], s[n - i - 1]);
    cout << (s[i]);
  }
}

我尝试了几种不同的操作,swap函数,使用指针将它们与temp变量手动交换。所以我去了互联网看看别人做了什么,但无济于事。我相信这里有一个简单的解决方案。

c++ algorithm reverse c-strings function-definition
1个回答
3
投票

该函数使用幻数100

int n = 100;

尽管主要是提示输入不超过50个字符。

cout << "Enter a string of no more than 50 characters: ";

您需要通过使用标准C函数strlen计算传递的字符串的长度。

该函数可以通过以下方式查看

char * reverse( char s[] )
{
    for ( size_t i = 0, n = std::strlen( s ); i < n / 2; i++ )
    {
        std::swap( s[i], s[n-i-1] );
    }

    return s;
}

请注意可变长度数组不是标准的C ++功能。

您应该写

const size_t SIZE = 100;
char charArray[SIZE];
© www.soinside.com 2019 - 2024. All rights reserved.