2015-03-19 3 views
0

Я пытаюсь написать программу на C++, которая проходит через массив символов, заменяя ch1 на ch2, поскольку проблема связана с тем, что я пытаюсь изменить фактическую строку который вводится, а не возвращает новую строку. В C# вы будете использовать «ref», но я смущен, как это сделать в C++, вам нужен * или &?Указатели и ссылки - Простая программа манипулирования CharArray

ниже код имеет много ошибок:

(7): C2664 ошибка: «STRLEN»: не удается преобразовать параметр 1 из «символа» до «Const символ *» Преобразование из интегрального типа к типу указателя требуется reinterpret_cast , Литье в стиле C или литье в стиле функции

(7): ошибка C2440: 'initializing': не может конвертировать из 'char *' в 'char []' Нет преобразований в типы массивов, хотя есть преобразования к ссылкам или указателям на массивы

(11): ошибка C2100: незаконное направление

(17): ошибка C2100: незаконное косвенность

(24): ошибка C2440: '=': не может преобразовать из 'полукокса []' до 'полукокса' Там нет контекста, в котором это преобразование можно

(36): ошибка C2664: 'заменить': не удается преобразовать параметр 1 из 'гольца [17]' к 'полукокса &'

#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; 
} 

ответ

2

в 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; 
    } 
} 
Смежные вопросы