У меня было задание, в котором мне приходилось удалять пробелы в начале слова с помощью указателей, изменять исходное слово и возвращать измененное слово.
Единственное, что мне дают, это то, что имя / аргументы функции должны выглядеть так:
char* trim(char *str)
и что в основной функции должно быть что-то вроде этого: (комментарии показывают ожидаемый результат)
char str[] = " Hello cpp", *newstr;
cout << "start" << str << "end" << endl; // start Hello cppend
newstr = trim(str);
cout << "start" << str << "end" << endl; // startHello cppend
cout << "start" << newstr << "end" << endl; // startHello cppend
Функция, которую я создал, выглядит следующим образом:
char* trim(char *str){
while(*str<33){
str++;
}
cout<<str<<endl;
return str;
}
Идея заключалась в том, что когда значением текущего указателя является пробел (* str <33), я хочу переместить адрес указателя на следующий символ.
Я использовал «while», поэтому он перемещается в следующее место, пока не укажет на значение, которое не является пробелом. </p>
Когда дело доходит до возвращения, все работает хорошо. «newstr» возвращается без пробелов, и вывод «startHello cppend», и когда я вывожу str в функции , он показывает текст без пробелов.
Но первоначальная стоимость остается нетронутой. Выход в основном все еще start Hello cppend
Почему при перемещении указателя в функции с использованием str ++ исходный указатель не изменяется, а в основной функции он по-прежнему с пробелами, но str в функции отображается без пробелов?