我有一个包含一些值的char数组。我想将该数组中的值从一些随机索引复制到其他一些随机索引。我怎么能这样做?
#include<iostream.h>
using namespace std;
int main()
{
char ar[100];
strcpy(ar,"string is strange");
cout << ar ;
return 0;
}
现在ar数组包含&#34;字符串很奇怪&#34; 。假设我想创建另一个char数组cp
,我希望将ar
的随机索引位置的值从7复制到10。有一些我们可以使用的字符串函数吗?
我知道我们可以使用strncpy
函数,但它从起始索引复制到所提到的字符数。是否有其他功能或strncpy
的重载版本
这将使我能够执行相同的操作?
答案 0 :(得分:2)
这样做
strncpy (dest, ar + 7, 2);
通常
strncpy (destination, source + start_index, number_of_chars);
The strncpy() function is similar, except that at most n bytes of src are copied. Warning: If there is no null byte among the first n bytes of src, the string placed in dest will not be null-termi‐ nated.
因此,您需要手动终止字符串:
dest[nos_of_chars] = '\0';
<强>更新强>
您可以使用以下内容:
char *make_substring (char *src, int start, int end)
{
int nos_of_chars = end - start + 1;
char *dest;
if (nos_of_chars < 0)
{
return NULL;
}
dest = malloc (sizeof (char) * (nos_of_chars + 1));
dest[nos_of_chars] = '\0';
strncpy (dest, src + start, nos_of_chars);
return dest;
}
当您使用C ++时,请不要使用char字符串进行处理,而是使用字符串类。
答案 1 :(得分:2)
你的代码是用C ++编写的,所以使用STL - 不要创建固定大小的字符数组,使用std :: string。这有一个方法substr(pos,n)。
所以你的代码是:
std::string str;
str = "string is not so strange";
cout << str << endl;
std::string small;
small = str.substr(7, 3);
cout << small << endl;
比使用C api进行潜在的不安全指针算法容易得多。
答案 2 :(得分:1)
要将n
个字符从p
位置string1
复制到string2
,您可以使用:
strncpy(string2, string1 + p, n);
如果您正在处理C ++字符串(std::string
),那么您可以使用substr
成员函数。
std::string string1 = "......";
std::string string2 = string1.substr(p, n);
答案 3 :(得分:1)
C ++
你想要达到什么目的? '字符串很奇怪'让我想起拼写检查 - &gt;排列
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string s = "string is strange";
std::sort(s.begin(), s.end());
while (std::next_permutation(s.begin(), s.end()))
std::cout << s << "\n";
return 0;
}
真正只是交换随机位置: http://ideone.com/IzDAj
#include <random>
#include <string>
#include <iostream>
int main()
{
using namespace std;
mt19937 random;
string s = "string is strange";
uniform_int_distribution<size_t> gen(0,s.size()-1);
for (int i=0; i<20; i++)
{
swap(s[gen(random)], s[gen(random)]);
cout << s << "\n";
}
return 0;
}
答案 4 :(得分:0)
您可以使用例如数据获取数组中特定位置的地址&ar[i]
。
例如,如果您在return
cout << &ar[6] << '\n';
它会打印
is strange
答案 5 :(得分:0)
你可以使用memcpy功能
void * memcpy ( void * destination, const void * source, size_t num );
在你的例子中
memcpy(cp,ar+p,sizeof(char)*n)