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

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

Войти
Регистрация
Восстановить пароль
 
aweds
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 10
#1

Заменить все повторяющиеся слова на S##, где ## - номер слова - C++

17.05.2009, 19:22. Просмотров 645. Ответов 1
Метки нет (Все метки)

Ребят, помогите плз с лабой, а то я ее уже 4 раз переписываю =(

Вечно я ее сначала пишу, а потом она все усложняется усложняется и я ее переписываю.

Суть такова: заменить все повторяющиеся слова на S##, где ## - номер слова.
Текст является структурой
C++
1
2
3
4
5
6
7
struct Text1{
    struct strings{
    char str[80];
    int len;
}strs[80];
int len;
} MyText;
чтение и запись в файл.
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
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<io.h>
 
extern ifstream a;
extern ofstream b;
//extern MyText;
 
char *readstring( char *st){
char *q=st;
a.getline(st,80);
cout<<st<<endl;
return st;
}
 
void readfile( char *an){
int q;
a.open(an);
int i=0; char *uk=&MyText.strs[i].str[0];
while(i<=80&&MyText.strs[i].str!=""){
uk=&MyText.strs[i].str[0];
uk="";
readstring(&MyText.strs[i].str[0]);
MyText.strs[i].len=strlen(MyText.strs[i].str);
cout<<MyText.strs[i].len<<endl;
if(MyText.strs[i].str[0]==0){MyText.len=i;break;}
i++;
}
MyText.len=i;}
 
int writestring(char *st){
b<<st<<endl;
return 0;}
 
int writetext(char *bn){
b.open(bn);
int i=0; char *uk;//=MyText.strs[i].str;
while(i<=MyText.len){
uk=&MyText.strs[i].str[0];
writestring(uk);
i++;}
return 0;}
обработка
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
#include<iostream.h>
//#include "c:\struct.h"
#include <io.h>
#include<string.h>
#include <iostream.h>
#include<stdlib.h>
extern char word[80],word1[80];
extern int num[50][50];
extern  int l,d;
extern count;
//extern MyText;
 
int getword(int n,int i,int fl){
int j=0,tm=0,ti=i;
label:if (fl==1) {while(tm<=MyText.strs[n].len){word[tm]=0;tm++;}j=0;while(MyText.strs[n].str[i]!=' '&&i<=strlen(MyText.strs[n].str)) {word[j]=MyText.strs[n].str[i];i++;j++;}}
else
 {j=0;while(tm<=80){word1[tm]=0;tm++;}while(MyText.strs[n].str[i]!=' '&&i<=strlen(MyText.strs[n].str))
  {word1[j]=MyText.strs[n].str[i];i++;j++;}}
if (word1==""||word==""||word1==" "||word==" ") goto label;
if (fl==1) count++;
if(MyText.strs[n].str[i+1]==' ')i--;;
return i;}
 
int newword(int n,int i){
int ti=i,f=0,k=1; char tmc[3];
MyText.strs[n].str[i]='s';
if (count<=9) {i++;itoa(count,tmc,3);MyText.strs[n].str[i]=tmc[0];}
if (count>9 && count<=99){i++;itoa(count,tmc,3);MyText.strs[n].str[i]=tmc[0];i++;MyText.strs[n].str[i]=tmc[1];}
          //{i++;MyText.strs[n].str[i]='2';}
if (count>99&& count <=999)//{i++; MyText.strs[n].str[i]=count/100+47; i++;MyText.strs[n].str[i]=(count-(count/100)*100)/10+47; i++;MyText.strs[n].str[i]=count-(count/100)*100-(count/10)*10-1+47;f=3;}
     {i++;itoa(count,tmc,3);MyText.strs[n].str[i]=tmc[0];i++;MyText.strs[n].str[i]=tmc[1];i++;MyText.strs[n].str[i]=tmc[2];}
i++;
ti=i;
k=1;
while(MyText.strs[n].str[i]!=' ' && MyText.strs[n].str[i]!='\0'  && k<=80){ti=i;
while(ti<=80){MyText.strs[n].str[ti]=MyText.strs[n].str[ti+1];ti++;}
k++;}
d=k-1;
return 1;
}
 
int find(int p,int s){
int i=0,j=0,lj=0;
while(i<=80){j=0;
while(j<=80){
j=getword(i,j,0);
if((strlen(word1)==strlen(word))&&(word[1]==word1[1])&&(word[strlen(word)]==word1[strlen(word1)]))
{if (MyText.strs[i].str[j-2]!=' '){
newword(i,j-strlen(word1));j=j-d;}else
{
newword(i,j-strlen(word1)-1);j=j-d;}
}else{lj=0;}
if(word[0]==0||word1[0]==0)break;
j++;}
i++;}
return 0;}
а вот мэйн.
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
#include <iostream.h>
#include<conio.h>
#include <fstream.h>
#include "c:\struct.h"
#include "c:\input.cpp"
#include "c:\work.cpp"
ifstream a;
ofstream b;
char word[80],word1[80],name[80],name1[80],*q=&name[0],*z=&name1[0];
int count,d=0;
 
 
void main(){
int i=0,j;
cout<<"Лабораторная работа №4"<<endl;
cout<<"произвести замену всех одинаковых слов на S##, где ##-номер первого включения слова"<<endl;
cout<<"Введите имя файла для считывания: "<<endl;
cin>>q;
readfile(q);
while(i<=MyText.len&&i<=80){j=0;
while(j<=80){
j=getword(i,j,1);
if (word[0]==0)break;
if (word!=" ")find(j+strlen(word),i);
}
i++;}
 
 
cout<<"Введите имя файла для записи: "<<endl;
cin>>z;
writetext(z);
getch();
}

Вся прога разбита на библиотеки.

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

Добавлено через 7 часов 15 минут 22 секунды
Поднимаю тему. Если поможете до сегодня, то с меня что нить хорошее! =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2009, 19:22     Заменить все повторяющиеся слова на S##, где ## - номер слова
Посмотрите здесь:

Удалить все повторяющиеся буквы из слова - C++
Дано слово, удалить из него все повторяющиеся буквы, оставив их первые вхождения,то есть в слове должны остаться только разные буквы.

Удалить из строки все повторяющиеся слова (без учета регистра) - C++
Удалить из сообщения все повторяющиеся слова (без учета регистра). У меня строка вводится в Memo. Помогите пожалуйста. Добавлено...

Удалить из слова все повторяющиеся буквы, оставив их первые вхождения - C++
Условие:Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения: в слове должны остаться только различные буквы. ...

Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения - C++
Создать очередь, содержащую слова. Удалить из очереди все повторяющиеся слова, оставив только их первые вхождения. Например, если...

Дана строка, содержащая текст. Вывести все слова, повторяющиеся более трех раз. - C++
Строки. Дана строка, содержащая текст. Вывести все слова, повторяющиеся более трех раз.

Найти порядковый номер слова максимальной длины и позицию слова - C++
Привет. Нужна помощь. Вот задача : Вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно...

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

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

Дано предложение, где два слова различны. Найти эти слова - C++
var mas:arrayof string; i,j,k:integer; w,s:string; begin writeln('Введите строку'); readln(s); k:=0; s:=s+' '; for i:=1 to...

Заменить все вхождения первого слова на второе - C++
Непонятная ошибка в коде Всем привет! Нам задали написать программу на С++, которая должна заменять все вхождения первого слова на...

Заменить все вхождения одного слова на другое - C++
Задание: считать из файла строки, заменить все вхождения одного слова на другое. В консоль: input, output, hello, bay. - заменить в файле...

Как заменить все найденные слова в переменной string - C++
Для поиска и замены в переменной string использую стандартные функции с++ find и replase НО с помощью них я могу заменить только...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aweds
0 / 0 / 0
Регистрация: 17.05.2009
Сообщений: 10
19.05.2009, 03:01  [ТС]     Заменить все повторяющиеся слова на S##, где ## - номер слова #2
Ребят, вы мне хоть скажите, ждать ли тут помощи или уйти на другой форум? =(
Ответ Создать тему
Опции темы

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