指针和引用 - 简单的 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::stringstd::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 操作程序的主要内容,如果未能解决你的问题,请参考以下文章

引用和指针

chararray的大小和长度不一样[重复]

指针操作字符串

C++指针和引用及区别

C++原生指针,引用与智能指针

(C/C++)区别:数组与指针,指针与引用