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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
artproo
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 18
#1

Строковые С++,неправильная работа функции - C++

11.01.2012, 19:02. Просмотров 1552. Ответов 13
Метки нет (Все метки)

Доброго времени,не правильно работает функция zad2,огромная просьба помочь в решении!Заранее спасибо
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*задача №1.    Написать и протестировать функцию подсчёта слов, начинающихся с конкретной буквы, в строке. 
задача №2.  Ввести строку, слова в которой разделены пробелами и запятыми. 
Распечатать эту строку, удалив из нее те слова, которые встретились в ней более одного раза
*/
#include<iostream>
using namespace std;
#include"Rus.h"
#define _USE_MATH_DEFINES
#include<math.h>
#include<time.h>
#include<string.h>
int zad1(char* str,char N);
int zad2(char* str);
 
int zad1(char* str,char N)
 
{
int i,S=0;
for(i=0;str[i]!=0;i++)
//if(str[i]==N)//jgg
if(str[i]==' ')
    {
        if(str[i+1]==N)
        {
        S++;
        
        for(;str[i]!=32;i++);
        }
    }
return S;
}
///////////////////////////////////////////
[COLOR="Red"]//Преподаватель что алгоритм в корне не правильный,хелп!!!форумчане помогите доработать данную функцию[/COLOR]
int zad2(char* str)
{ 
    char* sl=new char[80];
    char* k;
    int i=0;
    int in;
    int ik; 
    int n=strlen(str);
    int j=0;
    while(i<n)
    {
        in=i;
        while(str[i]!=' ' && i<strlen(str))
        {
            sl[j]=str[i];
            i++;
            j++;
        }
    ik=i;
    sl[j]='\0';
    k=strstr(str, sl);
    if(k!=NULL)
    strcpy(k,k+strlen(sl));
    i=ik+1;
    }
delete []sl;
return 0;
}
//////////////////////////////
int main(void)
{
 
int S, G;
char N, str[80];//, str1[80];
cout<<Rus("введите строку: ");
cin.getline(str,80);
cout<<Rus("введите букву: ");
cin>>N;
S=zad1(str,N);
cout<<S;
//cin.getline(str1,80);
G=zad2(str);
cout<<endl;
cout<<Rus("результат: ")<<str<<endl;
//cout<<S;
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 19:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строковые С++,неправильная работа функции (C++):

Неправильная работа Функции strcmp - C++
Здравствуйте,не могу разобраться,почему не работает блок с проверкой на те слова, которые не присутствуют в обеих строках одновременно. Уже...

Неправильная работа функции rand() в c++ - C++
Функция rand() при подключении функции srand не через time,а через переменную типа unsigned не выдает десятки вот в этом коде: ...

Неправильная работа хеш-функции - C++
Прежде чем начать не нужно сразу кидаться тапками и и.т.д я уже парюсь над этой задачей несколько дней так как не могу. Я читал несколько...

Неправильная работа программы после разбития ее на функции - C++
Ребята, кому не сложно, помогите найти ошибку. При выборе первого кейса меню все хорошо ввожу строку как положено, перехожу ко второму...

Неожиданное поведение fflush(), неправильная работа функции - C++
Никак не пойму почему код не хочет работать последовательно, так, как я ему указал.Что не так я делаю с fflush? Функция запрашивает лишь...

Неправильная работа - C++
Почему на неправильно работает? #include&lt;iostream&gt; using namespace std; int main() { int b; for (int i=0; i&lt;=14;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
11.01.2012, 19:54
  #2

Не по теме:

Цитата Сообщение от artproo Посмотреть сообщение
не правильно работает функция zad2
Как функцию назовёшь, так она и заработает...

artproo
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 18
11.01.2012, 20:05  [ТС] #3
да это конечно забавно,но есть комментарии по существу?
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.01.2012, 20:25 #4
Цитата Сообщение от artproo Посмотреть сообщение
Распечатать эту строку, удалив из нее те слова, которые встретились в ней более одного раза
Я не представляю себе, как сделать это задание без использования контейнера или хотя бы связного списка. На каждое слово заново парсить строку?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.01.2012, 20:45 #5
задание 2
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.01.2012, 20:50 #6
Array of pointers width predefined size is fine too.
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
11.01.2012, 21:01 #7
можно с помощью stl.
C++
1
2
3
4
5
#include <iterator>
#include <cstring>
void zad2(std::string s){
copy(s.begin(),unique(s.begin(),s.end()),std::ostream_iterator(cout," "));
}
artproo
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 18
11.01.2012, 21:53  [ТС] #8
спасибо за ответы!
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
12.01.2012, 01:48 #9
Цитата Сообщение от vetal10 Посмотреть сообщение
можно с помощью stl.
Так не получится. Попробуйте рабочий пример привести.

Цитата Сообщение от artproo Посмотреть сообщение
есть комментарии по существу?
А то!
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
#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <algorithm>
#include <iterator>
 
int main(){
    std::string buf;
    
    while ( std::cout << "String: " && std::getline(std::cin, buf) && ! buf.empty() ){
        std::replace(buf.begin(), buf.end(), ',', ' ');
    
        std::list<std::string> list;
        std::istringstream ist(buf);
        while ( ist >> buf )
            if ( std::find(list.begin(), list.end(), buf) == list.end() )
                list.push_back(buf);
    
        std::ostringstream ost;
        std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(ost, ", "));
        std::cout << "Unique words: " << std::string(ost.str(), 0, ost.str().length() - 2) << std::endl;
    }
    
    return 0;
}
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.01.2012, 03:20 #10
мм std::set же
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
12.01.2012, 03:28 #11
Цитата Сообщение от OstapBender Посмотреть сообщение
мм std::set же
И как добиться, чтобы слова в том же порядке шли? В принципе можно, конечно, но выглядеть ещё страшнее будет...
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.01.2012, 03:43 #12
easybudda, хз... ток щас увидел что set хранит всё в сортированном виде :)
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
12.01.2012, 15:20 #13
easybudda,
вот я попробовал написать пример но выдает вот такую ошибку
Код
Error	1	error C2679: binary '=' : no operator found which takes a right-hand 
operand of type 'char' (or there is no acceptable conversion)
	c:\program files\microsoft visual studio 10.0\vc\include\xutility	
2144	1
	chek
вот сам код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iterator>
#include <cstring>
#include <algorithm>
#include <iostream>
 
void zad2(std::string s){
copy(s.begin(),unique(s.begin(),s.end()),
std::ostream_iterator<std::string>(std::cout," "));
}
int main(){
std::string str="bla bla fd dhkwe ew";
zad2(str);
}
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.01.2012, 17:39 #14
Цитата Сообщение от vetal10 Посмотреть сообщение
std::ostream_iterator<std::string>(std::cout," ")
это для того чтобы откомпилилось
C++
1
std::ostream_iterator<char>(std::cout," ")
но применять std::unique нужно к отсортированой последовательности
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 17:39
Привет! Вот еще темы с ответами:

Строковые функции - C++
Помогите, пожалуйста составить программу, которая в заданном тексте находит и переделывает фрагмент цена вида ХХ.УУ соотвественно в такую...

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

Неправильная работа деструктора - C++
При выполнении деструктора вылетает ошибка //Врачебный контроль физиологического состояния спортсмена #include &lt;iostream&gt; ...

Неправильная работа исключений - C++
Сделал в программе исключения, если пользователь направльно ввводит значения: // englerr.cpp // контроль ввода данных для класса...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.01.2012, 17:39
Ответ Создать тему
Опции темы

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