Member 12817247 Ответов: 1

Реверс строки без изменения положения специальных символов


#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;
    chng(b);
    return 0;
}


Что я уже пробовал:

проблема:
тип char к char*
проблема int char
как передать строковые материалы указателя
пожалуйста объяснить

Richard MacCutchan

Вы пытаетесь изменить один элемент символа, который не имеет никакого смысла. Сначала вам нужно создать массив символов и заполнить его.

1 Ответов

Рейтинг:
1

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 чтобы эхом передать ему пользовательский ввод и заставить его работать.
Я почти уверен, что вы знаете, как это сделать, или вам сказали, как это сделать: это не "Привет, мир", так что пользовательский ввод-это то, что вы уже делали раньше. Перестаньте гадать, что вам нужно сделать, и подумайте об этом - это совсем не сложно!


Member 12817247

Итак, как с помощью char* chng (char* input){........ Я могу ввести строку??

OriginalGriff

Предоставив указатель на символ (или имя массива символов, это одно и то же) вызову cin и передав его вашей функции.
Вы почти наверняка делали это раньше в предыдущих упражнениях!

Member 12817247

#include <iostream>

использование пространства имен std;

char* chng(char* a){
int left, right, i=0, count=0;
char * temp, выход;
слева=0;
while (a[i]!= '\0'){

считать++;
я++;

}
right=count-1;
while (left< right) { if(!(а[влево]=""> У='а'&амп;&амп; в[влево]&ЛТ;='з')){
левый++;
}
иначе если(!(а[прямо]> У='а'&амп;&амп; в[вправо]&ЛТ;='з')){

право--;
}
ещё{
* temp=a[слева];
в[левой]=а[вправо];
a[справа]= * temp;

}
левый++;
право--;

}
выход= *a ;
обратный выход;

}

тап_п()
{
char* b;
cin>> b;
cout<< chng(b);
возвращает 0;
}




я сделал это ...но "обратный вывод" не работает

OriginalGriff

Ответ обновлен.

Philippe Mori

Линия cin>>b; это было бы неверно, так как указатель не инициализирован.

OriginalGriff

Вот что я сказал...

Philippe Mori

Ой! Я только прочитал код, думая, что это был ответ!

OriginalGriff

Это достаточно легко сделать!

Sandeep505

Можем ли мы иметь код C# для этого?