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

Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку - C++

Восстановить пароль Регистрация
 
DimWhite
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 14
29.03.2010, 18:37     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #1
помогите найти ошибку в программе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
void func(string s,int pos)
{ string slovo;
     string::size_type k=0,n=0;
s+=' ';
if (s[n]!=string::npos) 
{n++;
k=s.find (" ",pos);
slovo=s.substr(pos,k-pos);
if ((slovo[0]<'Z')&&(slovo[0]>'A'))
slovo='.';
pos=k+1;
func(s,pos);
};}
int main(void)
{
    string str;
    getline(cin,str);
    cout<<"str=";
    func(str,0);
    cout<<str;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2010, 18:37     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку
Посмотрите здесь:

рекурсивная функция, не возращающая значение C++
Рекурсивная функция, не возвращающая значение C++
C++ Составить программу, которая в заданном тексте заменяет все буквы
Составить рекурсивную функцию, которая определяет наибольшую цифру, и заменяет все строчные латинские буквы C++
Программа которая заменяет первую букву слова с гласной на прописную C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qwarta
 Аватар для qwarta
57 / 57 / 5
Регистрация: 20.11.2009
Сообщений: 214
30.03.2010, 01:19     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #2
Вариант без рекурсии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
using namespace std;
void func(string s)
{ string slovo;
  size_t k=0;
  size_t pos;
  s+=' ';
  while((k = s.find(" ")) != string::npos) 
  {
          slovo=s.substr(0,k);
          if ((slovo[0]>'A')&&(slovo[0]<'Z'))
              slovo=".";
          pos=k+1;
          cout << slovo << " ";
          s = s.substr(pos,s.length());
  }
}
int main(void)
{
  string str;
  getline(cin,str);
  func(str);
  cout<<endl;
  system("PAUSE");
  return 0;
}
Cepera
 Аватар для Cepera
52 / 52 / 1
Регистрация: 09.03.2009
Сообщений: 178
30.03.2010, 10:22     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #3
DimWhite, мне кажется, что, более правильно, в вашем случае, функцию func определить так:
C++
1
void func(string &s,int pos)
Т.е. передавать строку s не по значению, а по ссылке. Это раз....
В функции main, я думаю более правильно, сначала выводить сообщение с предложением ввести строку, а уже затем её считывать, т.е. так
C++
1
2
3
4
5
6
7
8
int main(void)
{
    string str;
    cout<<"str=";
    getline(cin,str);
    func(str,0);
    cout<<str;
}
А не наоборот, как делаете вы, Это два...
DimWhite
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 14
30.03.2010, 11:13  [ТС]     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #4
спасибо всем
попробую исправить.надеюсь заработает
Cepera
 Аватар для Cepera
52 / 52 / 1
Регистрация: 09.03.2009
Сообщений: 178
30.03.2010, 13:35     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #5
Вот это вот должно работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <string>
#include <stdlib.h>
 
using namespace std;
 
void func(string &s,int pos)
{
    if (s[pos]==0) return;
    int n,pos2;
    if ((pos2 = s.find(" ",pos)) != string::npos)
    {
        n=pos2-pos;        
        if ((s[pos]<='Z')&&(s[pos]>='A'))
            s.replace(pos,n,".");
     }
    else
    {
        pos2=s.length();
        n=pos2-pos;
        if ((s[pos]<='Z')&&(s[pos]>='A'))
            s.replace(pos,n,".");
    }
    func(s,pos2-n+1);
}
 
int main(void)
{
    string str;
    cout<<"str=";
    getline(cin,str);
    func(str,0);
    cout<<str<<endl;
    system("pause");
    return 0;
}
DimWhite
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 14
30.03.2010, 18:07  [ТС]     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку #6
спасибо огромное Cepera,
все действительно работает!!!!!
Yandex
Объявления
30.03.2010, 18:07     Рекурсивная функция, не возращающая значение, которая заменяет слова с большой буквы на точку
Ответ Создать тему
Опции темы

Текущее время: 16:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru