0

我是 C++ 新手,遇到了一个问题……我似乎无法使用 for 循环从字符串创建字符数组。例如,在 JavaScript 中,你会这样写:

var arr = [];
function setString(s) {
    for(var i = s.length - 1; i >= 0; i--) {
       arr.push(s[i]);
    }
    return arr.join("");
}

setString("Hello World!"); //Returns !dlroW olleH

我知道这有点复杂,我确实有一些关于如何做的背景知识,但它的语法对我来说仍然不太熟悉。

有什么方法可以在 c++ 中使用数组来做到这一点?我可以像在 JavaScript 中那样将数组元素加入一个字符串吗?

如果您能提供帮助,将不胜感激。提前致谢。如果有人需要更多信息,请告诉我,我会编辑帖子。

顺便说一句,我在 C++ 中的代码目前真的很混乱,但我知道我在做什么......我试过的是:

function setString(s) {
    string arr[s.size() - 1];
    for(int i = s.size() - 1; i >= 0; i--) {
        arr[i] = s.at(i); //This is where I get stuck at... 
    //I don't know if I'm doing something wrong or not.
    }
}

如果有人告诉我我做错了什么或者我需要放入或取出代码,那就太好了。它是在 Code::Blocks 中编译的控制台应用程序

4

3 回答 3

3

std::string具有c_str()返回 C 样式字符串的方法,该字符串只是一个字符数组。

例子:

std::string myString = "Hello, World!";
const char *characters = myString.c_str();
于 2013-10-25T17:54:26.470 回答
1

最接近您的功能的直接翻译:

string setString(string s) {
    string arr;
    for(int i = s.length() - 1; i >= 0; i--) {
        arr.push_back(s[i]);
    }
    return arr;
}
于 2013-10-25T18:01:39.430 回答
1

Astd::string是一个相当薄的包装器下的动态数组。无需逐个字符复制,因为它会为您正确完成:

如果字符数组以 null 结尾(即最后一个元素是 a '\0'):

const char* c = "Hello, world!"; // '\0' is implicit for string literals
std::string s = c; // this will copy the entire string - no need for your loop

如果字符数组不是以 null 结尾的:

char c[4] = {'a', 'b', 'c', 'd'}; // creates a character array that will not work with cstdlib string functions (e.g. strlen)
std::string s(c, 4); // copies 4 characters from c into s - again, no need for your loop

如果您不能使用std::string(例如,如果您被迫使用 ANSI C):

const char* c = "Hello, World!";
// assume c2 is already properly allocated to strlen(c) + 1 and initialized to all zeros 
strcpy(c2, c);

在您的 javascript 示例中,您正在反转字符串,这可以很容易地完成:

std::string s = "Hello, world!";
std::string s1(s.rbegin(), s.rend());

此外,如果您修复循环(下面的伪代码),您可以将迭代减半(对于 C++ 和 Javascript):

string s = "Hello, world!"
for i = 0 to s.Length / 2
    char t = s[i]
    s[i] = s[s.Length - 1 - t]
    s[s.Length - 1 - i] = t

这将交换字符串的末端以反转它。不是循环遍历 N 个项目,而是循环最多 N / 2 个项目。

于 2013-10-25T18:37:12.147 回答