2016-01-05 3 views
0

задача состоит в том, чтобы изменить каждую заглавную букву в нижнем регистре, и наоборот, а также увеличить каждое число на 1, и изменение 9 для 0.C++ передать массив символов опорожнить функция

#include <iostream> 
using namespace std; 

void modif (char*& arr){ 
    for (int i=0;arr[i]!=0;i++) 
     if ('a'<=arr[i] && arr[i]<='z'){ 
      arr[i]=char(((int)arr[i])-32); 
     } 
     else if ('A'<=arr[i] && arr[i]<='Z'){ 
      arr[i]=char(((int)arr[i])+32); 
     } 
     else if ('0'<=arr[i] && arr[i]<='8'){ 
      arr[i]=char(((int)arr[i])+1); 
     } 
     else if (arr[i]== '9'){ 
      arr[i]=char(((int)arr[i])-8); 
     } 
} 

int main() { 
    char * s=new char [100]; 
    cin.getline (s, 100); 
    void modif (char * s); 

    cout << s << endl; 
    delete [] s; 
} 

я могу заставить его работать без аннулируются функции, но не может с ним

+0

'void modif (char * s);' не вызывает функцию, она просто объявляет ее. –

+0

Спасибо. Случай закрыт :) – onslow

+0

@onslow Добро пожаловать в переполнение стека! Если ваша проблема решена и вам больше не нужна помощь, отметьте один из ответов, нажав на серое галочку рядом с ним. Это позволит другим посетителям сайта узнать, что вы больше не активно обращаетесь за помощью к этой проблеме, не читая комментарии. – dasblinkenlight

ответ

0

Попробуйте это так, что вы на самом деле вызвать функцию:

int main() { 
    char * s=new char [100]; 
    cin.getline (s, 100); 
    // void modif (char * s); // removed line 
    modif(s);     // new line 

    cout << s << endl; 
    delete [] s; 

}

0

Эта линия:

void modif (char * s); 

это объявление функции, вы хотите назвать его:

modif(s); 

также вам не нужно char*& в вашей функции, char* будет достаточно.

0

void modif (char * s); является официальным заявлением . Это необязательно в вашем примере, потому что modif определен над его точкой вызова. Вы должны были бы его, если вы хотите, чтобы переместить modif на место в файле ниже main или другой файл в целом:

#include <iostream> 
using namespace std; 

int main() { 
    char * s=new char [100]; 
    cin.getline (s, 100); 
    void modif (char*&); // Forward declaration 
    modif(s);   // Call 
    cout << s << endl; 
    delete [] s; 
} 

void modif (char*& arr){ 
    for (int i=0;arr[i]!=0;i++) 
    if ('a'<=arr[i] && arr[i]<='z'){ 
     arr[i]=char(((int)arr[i])-32); 
    } 

    else if ('A'<=arr[i] && arr[i]<='Z'){ 
     arr[i]=char(((int)arr[i])+32); 
    } 
    else if ('0'<=arr[i] && arr[i]<='8'){ 
     arr[i]=char(((int)arr[i])+1); 
    } 
    else if (arr[i]== '9'){ 
     arr[i]=char(((int)arr[i])-8); 
    } 
} 

вперед декларация является обещание компилятору, что будет определение ваша функция в другом месте. Таким образом, компилятор знает, как сделать вызов, если вы решите вызвать свою функцию. Обратите внимание, что подписи в объявлении и в определении должны совпадать.

вызов, с другой стороны, выглядит следующим образом:

modif(s); 

Здесь вы сообщаете компилятору, что вы хотите, чтобы вызвать функцию modif, и передать текущее значение s для формального параметра называется arr ,