我是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
中编译的控制台应用程序答案 0 :(得分:3)
std::string
使用c_str()
方法返回C样式字符串,该字符串只是一个字符数组。
示例:
std::string myString = "Hello, World!";
const char *characters = myString.c_str();
答案 1 :(得分:1)
最直接翻译你的功能:
string setString(string s) {
string arr;
for(int i = s.length() - 1; i >= 0; i--) {
arr.push_back(s[i]);
}
return arr;
}
答案 2 :(得分:1)
std::string
是一个相当薄的包装器下面的动态数组。没有必要逐个字符地复制,因为它会为您正确地执行:
如果字符数组以空值终止(即最后一个元素为'\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
如果字符数组不是以空值终止的:
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个项目。