Проблемы с перестановочной функцией и обменом строковыми значениями

Хорошо, мне нужна помощь, чтобы моя строка поменялась местами.

Вот общий код того, что я пытаюсь сделать, но я не могу просто переместить строку. Я начал с того, что пытался преобразовать его в символы, но в большинстве ответов говорилось, что он просто использует функцию std :: swap, однако я действительно потерял в использовании этого …

Моя общая цель — переставить строку, которая может быть указана для определенного раздела строки. Я новичок в C ++, я просто не уверен, как использовать методы / функции C ++ для достижения этой цели.

(есть также main.cc и Permutation h. Но это только для определения переменных, в основном скелетный код)

Вся помощь оценена, я вернусь сюда через 2 часа.

ОБНОВЛЕННЫЙ КОД)

    #include <iostream>   // for cout
#include <cstdio>     // for printf()
#include <sstream>    // for stringstream
#include <stdio.h>
#include <string.h>
#include "Permutation.h"using namespace std;

Permutation::Permutation() {
/* nothing needed in the constructor */
}

void Permutation::permute(const string& str) {

string stringnew = str;
int j;
int low = 0;
int high = str.length();

cout << stringnew << endl;

for (j = 0; j <= high; j++) {
string strtemp = stringnew[j];
std::swap((strtemp + low), (strtemp + j));
permute(str, low + 1, high);
std::swap(str[j + low], str[j + j]);

}
}

void Permutation::permute(const string& str, int low, int high) {
//  int j;
//  if (low == high) {
//      cout << str << endl;
//  } else {
//      for (j = low; j <= high; j++) {
//          std::swap(str[j + low], str[j + j]);
//          permute(str, low + 1, high);
//          std::swap(str[j + low], str[j + j]);
//      }
//  }
}

0

Решение

Вы должны работать через интерфейс класса. Вы не можете получить доступный для записи массив символов из std::string,

Что ты Можно сделать, это использовать оператор индекса массива и получить к нему доступ как str[i], Вы также можете использовать итераторы.

Причина этого заключается в том, что до C ++ 03, std::string не должен был быть массивом символов. Это может быть прерывистым. По крайней мере, одна реализация использовала std::deque резервное хранилище в стиле «массив указателей на массивы», которое дало ему возможность быстрой вставки, добавления и удаления из середины.

Кроме того, с точки зрения объектно-ориентированного программирования, нехорошо проникать в суть объекта и переупорядочивать его.

Просто для удовольствия, потому что я хотел отдохнуть от работы, некоторый код, который путается со строкой, используя индексы массива:

#include <cctype>
#include <string>
#include <iostream>

void uc(std::string &s)
{
size_t i;
const size_t len = s.length();
for(i=0; i<len; ++i) {
s[i] = toupper(s[i]);
}
}

void mix(std::string &s)
{
size_t i;
const size_t len = s.length();
for(i=1; i<len/2+1; ++i) {
std::swap(s[i-1], s[len-i]);
}
}

int main()
{
std::string s("Test String");
uc(s);
std::cout << s << std::endl;
mix(s);
std::cout << s << std::endl;
return 0;
}
1

Другие решения

Просто возьмите функцию c_str ()

std::string str("I'm a text");
char *pStr = str.c_str();
0

Это C ++, а не Java, как в указанной вами теме.
Прежде всего

char[] x

является допустимым объявлением только для времени компиляции известных размеров таблицы.

Другое дело, что std :: string не имеет метода .toCharArray, но имеет .c_str () метод, который вы можете использовать, чтобы получить const char * из std :: string.

НТН

0
По вопросам рекламы [email protected]