OriginalGriff
Это очень запутанный фрагмент кода, который у вас есть...
Вы заявляете a
как char
ценность:
char chng(char a){
Это означает, что вы можете передать методу только один байт.
Но...вы сразу же начинаете использовать его, как если бы это был массив символов:
while(a[i]!='\0'){
Это плохо, по многим причинам, все они сосредоточены вокруг фундаментального определения массива
имя массива-это указатель на первый элемент Это означает, что система пытается использовать ваше однобайтовое значение в качестве многобайтового указателя - 4 байта для 32-битной системы, 8 для 64-битной). Это не сработает, что бы вы ни делали.
Вы также пытаетесь вернуть указатель в виде одного символа, который также не будет работать.
Итак, начните с изменения объявления вашей функции:
char* chng(char* input){
(Не используйте односимвольные имена, это значительно усложняет чтение кода позже - описательные имена для всех ваших переменных помогают вашему коду стать самодокументируемым).
Затем менять
main
чтобы получить строку вместо символа от вашего пользователя и передать ее функции. Когда вы это сделаете, напишите другую функцию, в которую вы передадите строку и два целых числа, которая перевернет все символы между двумя индексами, которые вы передадите. Используйте это, чтобы перевернуть всю строку для тестирования и распечатать результат в вашем основном методе. Когда все это сработает, начните работать над тем, чтобы оставить специальные символы в покое.
Делать все это на небольших этапах, как это означает, что каждый раз вы делаете только немного дополнительной работы, но вы знаете, что все, на чем она основана, работает. Это может показаться медленным, но он добирается до решения намного быстрее, чем попытка написать все сразу и обнаружить, что что-то не работает!
Ответить:#include <iostream>
using namespace std;
char* chng(char* a){
int left,right,i=0,count=0;
char *temp,output;
left=0;
while(a[i]!='\0'){
count++;
i++;
}
right=count-1;
while(left<right){ if(!(a[left]="">='a'&& a[left]<='z')){
left++;
}
else if(!(a[right]>='a'&& a[right]<='z')){
right--;
}
else{
*temp=a[left];
a[left]=a[right];
a[right]=*temp;
}
left++;
right--;
}
output= *a ;
return output;
}
int main()
{
char* b;
cin>>b;
cout<<chng(b);
return 0;
}
С чего мне начать ?..
Давайте начнем с самого начала, потому что пока вы не получите основы правильно, ничего другого не может работать.
int main()
{
char* b;
cin>>b;
cout<<chng(b);
return 0;
}
Объявление переменной как
char*
не выделяет никакой памяти для ввода вашего пользователя: так где же данные, с которыми Вы читаете
cin
должен был уйти?
Удалить вызов на
chng
на мгновение, и просто получить основную работу первого использования
cout
чтобы эхом передать ему пользовательский ввод и заставить его работать.
Я почти уверен, что вы знаете, как это сделать, или вам сказали, как это сделать: это не "Привет, мир", так что пользовательский ввод-это то, что вы уже делали раньше. Перестаньте гадать, что вам нужно сделать, и подумайте об этом - это совсем не сложно!