我想将反向char*
复制到另一个char*
。我错过了输出第二行的一个字母。
我做了:
#include <iostream>
using namespace std;
void cp(char *str2, char *str1){
char *pom1 = str1;
while(*pom1){
pom1++;
}
char* pom2 = str2;
while(*pom1 != *str1){
pom1--;
*pom2 = *pom1;
pom2++;
}
*pom2 = '\0';
}
int main()
{
char *str1 = "ppC", str2[10] = "Witaj";
cout << "Napis str2 "<< str2 << endl;
cp(str2,str1);
cout << "Napis str2 "<< str2 << endl;
cp(str2,"CJP");
cout << "Napis str2 "<< str2 << endl;
return 0;
}
,输出为:
Napis str2 Witaj
Napis str2 Cp
Napis str2 PJC
虽然它应该是:
Napis str2 Witaj
Napis str2 Cpp
Napis str2 PJC
答案 0 :(得分:4)
该错误发生在函数
的声明中while(*pom1 != *str1){
必须有
while( pom1 != str1){
考虑到字符串文字具有常量数组的类型。因此,例如变量str1必须声明为
const char *str1 = "ppC";
此功能也应声明为
void cp( char *str2, const char *str1 );
此外,了解标题std::reverse_copy
中声明的标准算法<algorithm>
会很有用:)
答案 1 :(得分:2)
stdlib中有
reverse_copy
......它的使用方式如下:
template <typename CharT, size_t Ndest>
void cp(CharT (&dest)[Ndest], CharT const *src){
auto f = src, l = src + std::strlen(src);
assert(std::distance(f,l) < Ndest);
*(std::reverse_copy(f, l, dest)) = '\0';
}
所以,请看 Live On Coliru
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cassert>
template <typename CharT, size_t Ndest>
void cp(CharT (&dest)[Ndest], CharT const *src){
auto f = src, l = src + std::strlen(src);
assert(std::distance(f,l) < Ndest);
*(std::reverse_copy(f, l, dest)) = '\0';
}
#include <iostream>
int main()
{
char str1[] = "ppC";
char str2[10] = "Witaj";
std::cout << "Napis str2 "<< str2 << std::endl;
cp(str2, str1);
std::cout << "Napis str2 "<< str2 << std::endl;
cp(str2,"CJP");
std::cout << "Napis str2 "<< str2 << std::endl;
return 0;
}
答案 2 :(得分:0)
在这种情况下,只需使用标准库std::reverse_copy()
:
std::reverse_copy( input , input + strlen( input ) , output );
答案 3 :(得分:0)
复制粘贴解决方案
int len(const char *p) {
int c = 0;
while (*p != '\0')
{
c++;
p++;
}
return(c);
}
void cp(char *str2, const char *str1){
if(!(len(str2)<len(str1))){
const char *pom1 = str1;
while(*pom1){
pom1++;
}
char* pom2 = str2;
while( pom1 != str1){
pom1--;
*pom2 = *pom1;
pom2++;
}
*pom2 = '\0';
}
}