字符串变量,比如说"字符串str",可以直接复制到数组中吗?

Can a String variable, lets say 'String str', be directly copied into array?

本文关键字:字符串 数组 复制 比如说 变量 str      更新时间:2023-10-16

如果我有一个字符串,我想在不使用内置函数的情况下反转它。是否可以直接将字符串复制到数组中?

Void Main ()
{
string str = "Abc";
int length = strlen(str);
char strArray[len]; 
str = strArray
String str2 = new String()
for (int i=length-1, i>=0, i--)
{ 
str2 = str2 +strArray[i];
}
}

是的,您可以将std::string的内容复制到char数组中(如其他一些答案所示(,但您不需要这样做。

std::string内容可以用作数组!在其上使用[]运算符。

来吧:

#include <string>
#include <iostream>
int main()
{
std::string str = "Superb!";
// Iterate over the first half of the string
for (std::size_t i = 0; i < str.size() / 2; i++)
{
// What's the equivalent index at the other end?
const std::size_t other_i = str.size() - i - 1;
// Swap the values
const char temp = str[i];
str[i] = str[other_i];
str[other_i] = temp;
}
// Have a look
std::cout << str << 'n';   // Output: !brepuS
}

容易!

这可以通过您不感兴趣的几种方式进一步改进:

  • std::string::size_type是拼写std::string索引的"正确"方法;
  • std::swapchar temp古宾更受欢迎;
  • 除了出于教育原因外,手写循环有点愚蠢;
  • 如果您不需要就地反转,一个简单的构造std::string str2{str1.rbegin(), str2.rend()};就可以完成工作;
  • 如果你这样做,std::reverse就是你的朋友。

假设我有一个字符串,我想在不使用内置的情况下修改它 功能

您不需要字符数组。只需对带有字符串的数组执行您计划执行的操作:

void reverse(std::string& s) {
for (int i=0;i < s.size() / 2 ; ++i) {
char temp = s[i];
s[i] = s[ s.size() - i - 1];
s[ size() - i - 1] = temp;
}
}

(未编译或测试(

假设我有一个字符串,我想在不使用内置函数的情况下对其进行修改。是否可以直接将字符串复制到数组中?

我假设,你的Stringstd::stringstrlen(str)str.length()的,Charchar的。

#include <string>
#include <iostream>
#include <memory>  // std::unique_ptr<>
int main()
{
std::string str = "Hello, World!";
auto len = str.length();
auto strarray = std::make_unique<char[]>(len + 1);
auto *a = strarray.get() + len - 1;
auto *p = str.data();
while (*p)
*a-- = *p++;
std::cout << strarray << 'n';
}

输出:

!dlroW ,olleH

尝试类似此代码的内容将单字节字符串复制到数组中。不要忘记 null 终止符来输出复制的字符串。

std::string str = "Abc";
char* strarray = new char[str.length() + 1];
str.copy(strarray, str.length());
strarray[str.length()] = 0;
std::cout << strarray << std::endl;
delete[] strarray;