Member 13906640 Ответов: 3

Как сделать маленькие буквы в строке помогите!


я попробую это сделать,,
это неправильно?

сообщение : Ошибка сегментирования (ядро бросила)

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

int n;
	string s;
        cout << "Long string : ";
	cin >> n;
        cout << "String = ";
   	cin >> s;
	string y = s;
	for(int i = 0; i < n; i++)
	{
		for(int j = i+1; j < n; i++)
		{
			if(y[i] > s[j])
			{
				s[i] = s[j];
				s[j] = y[i];
			}
		}
return 0;
	}

3 Ответов

Рейтинг:
2

CPallini

Ты же знаешь, что C++ язык программирования имеет стандартную библиотеку:

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

int main()
{
  string s;
  cout << "please enter a string: \n";
  cin >> s;
  auto it = min_element( s.cbegin(), s.cend());
  
  if ( it != s.cend())
    cout << "the smallest letter in the string is '" << *it << "'" << endl;
}


Рейтинг:
2

OriginalGriff

Как вы думаете, зачем вам нужны два вложенных цикла? Особенно когда вы увеличиваете i в обоих случаях вместо того, чтобы i в одном, и j в другом?

Вместо вложенного цикла подумайте, как бы вы сделали это вручную:
Вы начнете с пустого "самого низкого" значения (поэтому установите его на максимально возможное - тогда все остальные будут меньше его) и посмотрите на каждый символ в строке один раз, сравнивая его с текущим "самым низким".
Если он такой же или больше, вы его проигнорируете.
В противном случае вы бы установили "самое низкое" на текущее значение.

После цикла "самая низкая" - это самая маленькая буква.

Так зачем же запускать вложенные циклы?


Рейтинг:
0

Jochen Arndt

Кроме уже упомянутой ошибки инкрементирования существует еще одна ошибка i вместо j во внутренней петле:
Вы получаете доступ к символам строк вплоть до индекса n- Это не сработает, если ... n больше, чем длина строк.

Обе ошибки приводят к выходу из привязки доступа (доступ к символам из памяти, используемой строками), что приводит к неопределенному поведению или - в худшем случае, как здесь, - ошибкам сегментации.

Вместо того чтобы позволить пользователю ввести значение для n, используйте длину введенной строки:

int n = s.length();
Используйте его для поиска самой маленькой буквы, как это предлагается в решении 1.