Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
1

В каждом слове заменить первую букву на прописную

15.05.2013, 16:40. Показов 4657. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана строка символов, состоящая из произвольного текста, слова
разделены пробелами. В каждом слове заменить первую букву на прописную.Использовать тип (класс) string.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string task3(string s,string s1)
{
 
  int pos=1,len=0,i;
 
  len=s.length();
  s[0]=char(int(s[0])-32);
  for (i=0;i<len;i++)
  {
  pos=s.find(' ');
  s[pos+1]=char(int(s[pos+1])-32);
 
  }
 
 
  return s;
 
}
P.S. проблема в том, что когда я нахожу пробел и след.символ делаю большим, потом нужно же продолжить цикл, а для этого я понял нужно запомнить строку в которой символ редактировал, удалить часть строки и продолжить цикл. Проблема с реализацией моих мыслей. Хелп.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2013, 16:40
Ответы с готовыми решениями:

В следующем слове после точки, первую строчную букву заменить на прописную
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом...

Заменить в каждом слове первую букву на последнюю букву в этом слове
Подскажите пожалуйста :cry: Задание звучит так: Вывести на экран все слова, преобразовав их...

Заменить в каждом слове первую букву на заглавную
Вывести на экран все слова, преобразовав их следующим образом: заменить в каждом слове первую букву...

Заменить первую букву слов на прописную
Функции, строки и файлы Выполнить задания пятого семинара («Строки и файлы»), оформив в виде...

9
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 17:31 2
Данную программу можно сделать с помощью цикла while. Условием цикла будет поиск пробелов в строке, то есть, выполнять поиск пока функция find() не вернет значение string::npos(это будет означать, что больше пробелов в строке нету). Для поиска следующего пробела надо запомнить позицию предыдущего и передавать его параметр(не забыть добавить +1 к нему), то есть вот так:
C++
1
pos=s.find(' ', pos+1);
0
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
15.05.2013, 17:51  [ТС] 3
C++
1
2
3
4
5
6
7
s[0]=char(int(s[0])-32);
  while(pos>0)
  {
  pos=s.find(' ',pos+1);
  s[pos+1]=char(int(s[pos+1])-32);
 
  }
Вот так написал, вроде бы работает, но 1 символ(т.е. нулевой) вечно какой-то кривой. В чем проблема?
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 18:15 4
что значит "кривой"?
0
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
15.05.2013, 18:35  [ТС] 5
Цитата Сообщение от metaluga145 Посмотреть сообщение
что значит "кривой"?
допустим я ввожу qwe, должно быть Qwe а получается 1we, а дальше все ок.
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 19:14 6
Lers, можно полный код? потому что у меня вот такой код работает
C++
1
2
3
4
char a='q';
    a=char(int(a)-32);
    std::cout<<a<<std::endl;
    system("pause");
Добавлено через 27 секунд
как и положено выводит 'Q'
0
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
15.05.2013, 19:20  [ТС] 7
Это функция.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string task3(string s,string s1)
{
 
  int pos=1,i;
 
  s[0]=char(int(s[0])-32);
  while(pos>0)
  {
  pos=s.find(' ',pos+1);
  s[pos+1]=char(int(s[pos+1])-32);
 
  }
 
 
  return s;
 
}
Вот так вызываю
C++
1
2
3
4
5
6
7
8
9
case 2:
            {
            string s;
            int post;
            s=M2->Text.c_str();
            string s1=task3(s,s1);
            M3->Lines->Add(AnsiString(s1.c_str()));
            break;
            }
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 19:31 8
Lers, там получается 1, потому,что в первом проходе pos=1(т.е. больше 0), оно заходит в цикл, находит новое значение pos=-1, а потом опять меняет элемент с индексом pos+1(который равен 0).
1
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
15.05.2013, 19:33  [ТС] 9
Цитата Сообщение от metaluga145 Посмотреть сообщение
Lers, там получается 1, потому,что в первом проходе pos=1(т.е. больше 0), оно заходит в цикл, находит новое значение pos=-1, а потом опять меняет элемент с индексом pos+1(который равен 0).
спасибо, не обратил внимание))
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 19:33 10
перепишите код вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string task3(string s)
{
 
  int pos=-1;
 
  
  do
  {
      s[pos+1]=char(int(s[pos+1])-32);
      pos=s.find(' ',pos+1);
  }while(pos>0);
 
 
  return s;
 
}
1
15.05.2013, 19:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2013, 19:33
Помогаю со студенческими работами здесь

Заменить в файле каждую первую букву слова на прописную
Написать программу, которая считывает текст из файла и выводит его на экран, заменив каждую первую...

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

Заменить каждую первую букву слов, начинающихся с гласной буквы, на прописную
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив...

Файлы: заменить каждую первую букву слов, начинающихся с гласной буквы, на прописную
Добрый вечер! Проблема с заданием по теме &quot;строки и файлы&quot;: не получается написать основную часть,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru