вы можете легко использовать класс строку:
#include <iostream>
#include <string>
int main()
{
std::string s1 = "Hello", s2;
for(int i(s1.length() - 1); i >= 0; i--)
s2+= s1[i];
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
return 0;
}
- , чтобы решить на вашем пути с использованием массива символов рассмотрим:
1- вы вводите sizeOfString
один вопрос: Что касается ввода с переполнением cin или нижним уровнем входного размера (меньше или больше) ???
например:
sizeOfString = 5;
cin >> charray3; // "ab" now the size is only 3 (+ null terminator)
так писать:
charray3[sizeOfString - 1] = 'c'; // charray3[5 - 1] // charray[4]
пока charray4 не введен, потому что вы введены только charray3[0]
и charray3[1]
так, как следствие, Segfault.
, чтобы исправить это вы должны сделать некоторую дополнительную работу:
#include <iostream>
using namespace std;
int main()
{
// Reversing A String
cout << "welcome to string reverser" << endl;
int sizeOfString;
cout << "please input size of string" << endl;
cin >> sizeOfString; // you specified size
cin.ignore(1, '\n'); // clean the input buffer
char* charray3 = new char[sizeOfString + 1];
//cin>>charray3; use getline instead to get whitespaces
cout << "enter text: " << endl;
cin.getline(charray3, sizeOfString); // what if the user enter a text smaller or bigger than sizeOfString???
charray3[sizeOfString] = '\0';
//to correct it:
// take effects of input on sizeOfString
sizeOfString = strlen(charray3);
cout << "before reversing: " << endl;
cout << charray3 << endl;
// to reverse it create a temporary array:
char* pTmp = new char[sizeOfString + 1];
for(int i(sizeOfString-1), j = 0; i >= 0; i--, j++)
pTmp[j] = charray3[i];
pTmp[sizeOfString] = '\0';
cout << "after reversing: " << endl;
cout << pTmp << endl;
// don't forget to clean:
delete[] charray3;
delete[] pTmp;
return 0;
}
Что произойдет, если вы выполните этот код в своем отладчике? – MrEricSir
Является ли 'sizeOfString' числом байтов, которое занимает строка в памяти, или количеством символов в ней? Вы говорите, что вы устанавливаете 'sizeOfString' в 3 для« abc », подразумевая, что это число допустимых символов в нем, но затем вы используете его как размер массива для выделения, подразумевая, что это размер памяти. (Если вы не понимаете, почему это невозможно, вы не понимаете строки C-стиля.) –
FYI, 'char charray3 [sizeOfString];' не является стандартным C++, когда 'sizeOfString' не является постоянным выражением , – crashmstr