置换函数和交换字符串值的问题

时间:2012-12-11 23:39:20

标签: c++ permutation eclipse-juno arrays

好的,所以我需要一些帮助让我的字符串交换。

这是我想要做的整体代码,但我不能只是移动字符串。我开始尝试将其转换为字符,但大多数回复说只是使用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]);
//      }
//  }
}

3 个答案:

答案 0 :(得分:1)

您必须完成类接口。您无法从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 :(得分:0)

只需使用c_str() - 函数

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

答案 2 :(得分:0)

这是C ++,而不是你指向的线程中的java。 首先

char[] x 

仅对编译时已知的表大小有效声明。

另一件事是std :: string没有.toCharArray方法但它有 .c_str()方法,你可以用来从std获取 const char * ::字符串。

HTH