Как создать функцию, которая беспорядочно перемешивает строку - PullRequest
0 голосов
/ 18 февраля 2011

Моя основная функция содержит строку, которую я хотел бы перемешать. Я нашел кусок кода, который передает в char* и возвращает 0, когда завершено. Я следовал инструкциям провайдеров кода, чтобы просто передать строку, которую вы хотели бы перемешать.

#include <iostream>
#include <string.h>
#include <time.h>
using namespace std;

int scrambleString(char* str)
{
     int x = strlen(str);
     srand(time(NULL));
     for(int y = x; y >=0; y--)
     {
          swap(str[rand()%x],str[y-1]);
     }
     return 0;
}

Когда я это делаю, я получаю сообщение об ошибке "no suitable conversion function "std::string" to "char*" exists.

Я также попытался передать const char*, но это не позволит мне получить доступ к слову и изменить его.

Ответы [ 5 ]

7 голосов
/ 18 февраля 2011

Попробуйте вместо этого:

std::string s = "Hello";
std::random_shuffle(s.begin(),s.end());

Кстати, не забудьте включить <algorithm>, чтобы использовать std::random_shuffle, и вам нужно включить <string> для std::string. <string.h> для библиотеки c-string, и если вы собираетесь использовать ее в C ++, вам следует использовать вместо нее <cstring>.

2 голосов
/ 18 февраля 2011

Почему вы смешиваете std::string с char*?Вы должны просто работать непосредственно со строкой:

void scrambleString(std::string& str) 
{
    int x = str.length();
    for(int y = x; y > 0; y--) 
    { 
        int pos = rand()%x;
        char tmp = str[y-1];
        str[y-1] = str[pos];
        str[pos] = tmp;
    }
}

Использование становится:

    std::string value = "This is a test";
    scrambleString(value);

При этом std :: random_shuffle сделает это за вас...

1 голос
/ 18 февраля 2011

std :: string class не может быть преобразован в char * неявно.Вы должны использовать string.c_str () для преобразования в const char * из std :: string.

Обратите внимание, c_str () возвращает константный указатель на строку, скопированную из внутренней памяти std :: string, поэтому вы не можете изменитьего содержание.вместо этого вы должны скопировать в другой массив или вектор.

0 голосов
/ 14 июня 2013

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

#include <random>

std::string mystring = "scramble this please";

std::default_random_engine rng;
std::uniform_int_distribution<int> rng_dist(0, 255);
for(unsigned int n = 0; n != mystring.size(); ++n) {
  mystring[n] = static_cast<unsigned char>(rng_dist(rng));
}
0 голосов
/ 18 февраля 2011

Попробуйте использовать это так:

std :: string stringToScramble = "привет мир";

свалка (stringToScramble.c_str ());

Обратите внимание на использование .c_str (), которая должна преобразовать строку в нужный вам формат.

...