Попытка перевернуть строку C - PullRequest
2 голосов
/ 17 марта 2020

Я не могу использовать никакие функции c, кроме strlen(), и также не могу использовать строки. Я был в этом в течение неудачного количества времени. Я продолжаю получать странные символы как часть вывода. например, вопросительные знаки и, по сути, странные альтернативные коды - это то, на что это похоже.

#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, используя указатели, чтобы вручную поменять их местами с временной переменной. Поэтому я пошел в inte rnet, чтобы посмотреть, что сделали другие люди, но безрезультатно. Я убежден, что есть простое решение.

1 Ответ

3 голосов
/ 17 марта 2020

Функция использует волшебный c номер 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];
...