2017-01-09 4 views
0

В следующей части кода строки подкачкиРеверсивный строки в C++

end = &str[len - 1]; 

Я не понимая адресацию часть. Когда я делаю это без части адресации, он все еще работает, но дает мне предупреждение, что «значения типа char не могут быть присвоены идентификатору типа char». Вот полный код:

#include<iostream> 
    #include<cstring> 
    using namespace std; 

int main() 
{ 
    char str[] = "This is a test"; 
    char *start, *end; 
    int len; 
    int t; 

    cout << "Original " << str << "\n"; 
    len = strlen(str); 
    start = str; 
    end = str[len - 1]; 

//this reverses the string 
    while (start < end) { 

     t = *start; 
     *start = *end; 
     *end = t; 

     start++; 
     end--; 

    } 
    cout << "Reversed" << str << "\n"; 
    system("PAUSE"); 
    return 0; 
} 
+0

* "Реверсивная строка в ** C++ **" * не понравится, пожалуйста. Не так. Я уважаю программистов C и C, и что им принадлежит, им дается. У вас есть выделенный тип для строк, у вас есть алгоритмы, у вас есть 'swap' ... C++ - это не только' cout'. Извините, жалуюсь, но я чувствую себя опечаленным. – luk32

+0

Я работаю над примерами через учебник. – Jeff

+0

Я бы красным обозначил это. Шутки в сторону. Я считаю это вредным. Он учит вас устаревшим вещам. У вас никогда не было бы такой проблемы в правильной программе на C++ ... или это книга C? Это выглядит как C-код с 'cout'. Вот как программисты C использовали для обучения C++ 15-20 лет назад. По крайней мере, это мой опыт. – luk32

ответ

1

Я не понимая адресацию часть.

Учитывая

char str[] = "This is a test"; 
char *start, *end; 
len = strlen(str); 

затем end является указателем на символ, и

end = &str[len - 1]; // `end` points to the last character (before the `\0`) 

Вы должны использовать (адрес в) оператора &, потому что end является указателем и поэтому он должен быть назначен адрес чего-то (здесь адрес последнего символа строки).

Когда я делаю это без адресации части он все еще работает

Я не думаю, что это будет - вы должны иметь ошибку компиляции

end = str[len - 1]; // invalid conversion from ‘char’ to ‘char*’ 
+0

У меня есть один следующий вопрос pls. Почему следующее не нужно указывать на адрес: start = str; – Jeff

+0

@Jeff - это потому, что 'str' - это строка (не один символ). – artm

+0

Спасибо. Я вижу сейчас. – Jeff

0

Вы должны konw тип от end - char*, но тип str[len-1] - char, поэтому вам нужно изменить тип str[n-1] на char*, так что вам нужно &str[len-1].

Но если вы используете string, будет простой метод:

Используйте зЬй :: обратный метод из STL:

станд :: реверс (str.begin(), str.end ()); // str shoud be string type

Вам нужно будет включить библиотеку «алгоритм», #include.

+0

Ваше сообщение не касается вопроса OP. –

+1

@RSahu OP фактически не задал вопрос. Разумно предположить, что вопрос заключается в том, «что является разумным способом изменить строку на C++». –

+0

@DavidSchwartz, они вроде как: * Я не понимаю адресацию * –

0

Может быть, это может помочь

void reverse (char word[]) 
{ 
    int left = 0; 
    int right = strlen(word) - 1; 

    while (left < right) 
    { 
     char temp = word[left]; 
     word[left] = word[right]; 
     word[right] = temp; 
     left++; 
     right--; 
    } 
    cout << word; 

} 

Я надеюсь, что это дает вам идею.

Смежные вопросы