Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
#1

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

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

Дана строка символов, состоящая из произвольного текста, слова
разделены пробелами. В каждом слове заменить первую букву на прописную.Использовать тип (класс) 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. проблема в том, что когда я нахожу пробел и след.символ делаю большим, потом нужно же продолжить цикл, а для этого я понял нужно запомнить строку в которой символ редактировал, удалить часть строки и продолжить цикл. Проблема с реализацией моих мыслей. Хелп.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 16:40     В каждом слове заменить первую букву на прописную
Посмотрите здесь:
В следующем слове после точки, первую строчную букву заменить на прописную C++
C++ Заменить в файле каждую первую букву слова на прописную
C++ Заменить каждую первую букву слов, начинающихся с гласной буквы, на прописную
C++ Работа со строками. Заменить каждую первую букву в словах, начинающихся с гласной буквы на прописную
C++ Задан текст удалить первую букву в каждом слове с++ visual studio
В каждом слове заданного предложения поменять местами первую букву и последнюю C++
C++ Заменить в слове первую букву “A” на символ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 17:31     В каждом слове заменить первую букву на прописную #2
Данную программу можно сделать с помощью цикла while. Условием цикла будет поиск пробелов в строке, то есть, выполнять поиск пока функция find() не вернет значение string::npos(это будет означать, что больше пробелов в строке нету). Для поиска следующего пробела надо запомнить позицию предыдущего и передавать его параметр(не забыть добавить +1 к нему), то есть вот так:
C++
1
pos=s.find(' ', pos+1);
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
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 символ(т.е. нулевой) вечно какой-то кривой. В чем проблема?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 18:15     В каждом слове заменить первую букву на прописную #4
что значит "кривой"?
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
15.05.2013, 18:35  [ТС]     В каждом слове заменить первую букву на прописную #5
Цитата Сообщение от metaluga145 Посмотреть сообщение
что значит "кривой"?
допустим я ввожу qwe, должно быть Qwe а получается 1we, а дальше все ок.
metaluga145
243 / 244 / 20
Регистрация: 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'
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
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;
            }
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 19:31     В каждом слове заменить первую букву на прописную #8
Lers, там получается 1, потому,что в первом проходе pos=1(т.е. больше 0), оно заходит в цикл, находит новое значение pos=-1, а потом опять меняет элемент с индексом pos+1(который равен 0).
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 203
15.05.2013, 19:33  [ТС]     В каждом слове заменить первую букву на прописную #9
Цитата Сообщение от metaluga145 Посмотреть сообщение
Lers, там получается 1, потому,что в первом проходе pos=1(т.е. больше 0), оно заходит в цикл, находит новое значение pos=-1, а потом опять меняет элемент с индексом pos+1(который равен 0).
спасибо, не обратил внимание))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2013, 19:33     В каждом слове заменить первую букву на прописную
Еще ссылки по теме:
Программа которая заменяет первую букву слова с гласной на прописную C++
Вывести на консоль заданное слово, изменив первую букву на прописную, а остальные на строчные C++
Как прочитать первую букву в слове C++
Удалить последнюю букву в каждом слове C++
Переместить в слове первую букву в конец слова C++

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

Или воспользуйтесь поиском по форуму:
metaluga145
243 / 244 / 20
Регистрация: 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;
 
}
Yandex
Объявления
15.05.2013, 19:33     В каждом слове заменить первую букву на прописную
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru