指针和引用 - 简单的 CharArray 操作程序
Posted
技术标签:
【中文标题】指针和引用 - 简单的 CharArray 操作程序【英文标题】:Pointers and References - Simple CharArray Manipulation Program 【发布时间】:2015-03-19 14:56:54 【问题描述】:我正在尝试用 C++ 编写一个程序,该程序通过一个 char 数组,将 ch1 替换为 ch2,我遇到的问题是让它更改输入的实际字符串,而不是返回一个新的细绳。在 C# 中你会使用“ref”,但我很困惑如何在 C++ 中做到这一点,你需要 * 还是 &?
下面的代码有很多错误:
(7): 错误 C2664: 'strlen' : 无法将参数 1 从 'char' 转换为 'const char *' 从整数类型转换为指针类型需要 reinterpret_cast、C-style cast 或 function-style cast
(7): error C2440: 'initializing' : cannot convert from 'char *' to 'char []' 尽管有对数组的引用或指针的转换,但没有对数组类型的转换
(11): 错误 C2100: 非法间接
(17): 错误 C2100: 非法间接
(24): error C2440: '=' : cannot convert from 'char []' to 'char' 没有可以进行这种转换的上下文
(36): 错误 C2664: 'replace' : 无法将参数 1 从 'char [17]' 转换为 'char &'
#include<iostream>
#include<cstring>
using namespace std;
int replace(char & str, char ch1, char ch2)
char newStr[]= new char[strlen(str)+1];
int i=0;
while(str!='\0')
if(*str==ch1)
newStr[i]=ch2;
else
newStr[i]=*str;
str++;
i++;
newStr[i]='\0';
str = newStr;
return 0;
int main()
char str[]="My name is Craig";
char takeOut='C';
char changeTo='a';
cout << "Before: " << str <<endl;
int changes=replace(str, takeOut, changeTo);
cout << "After: " << str << endl;
cin.get();
cin.get();
return 0;
【问题讨论】:
【参考方案1】:在 C++ 中,您将使用 std::string
和 std::replace
:
std::string s = "My name is Craig";
std::replace(s.begin(), s.end(), 'C', 'a');
如果您出于某种原因想要实现自己的版本,采用指向空终止字符串的指针,主要的一点是您不需要创建新字符串:
void replace(char* str, char ch1, char ch2)
while (*str != '\0')
if (*str == ch1) *str = ch2;
++str;
【讨论】:
以上是关于指针和引用 - 简单的 CharArray 操作程序的主要内容,如果未能解决你的问题,请参考以下文章