Хорошо, мне нужна помощь, чтобы моя строка поменялась местами.
Вот общий код того, что я пытаюсь сделать, но я не могу просто переместить строку. Я начал с того, что пытался преобразовать его в символы, но в большинстве ответов говорилось, что он просто использует функцию 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]);
// }
// }
}
Вы должны работать через интерфейс класса. Вы не можете получить доступный для записи массив символов из 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;
}
Просто возьмите функцию c_str ()
std::string str("I'm a text");
char *pStr = str.c_str();
Это C ++, а не Java, как в указанной вами теме.
Прежде всего
char[] x
является допустимым объявлением только для времени компиляции известных размеров таблицы.
Другое дело, что std :: string не имеет метода .toCharArray, но имеет .c_str () метод, который вы можете использовать, чтобы получить const char * из std :: string.
НТН