Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Удаление элементов из строки - C++

16.03.2013, 18:57. Просмотров 1115. Ответов 6
Метки нет (Все метки)

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
#include <stdio.h>
int vvod ( char *m, int n, int *k);
void udal ( char *m,int n, int k);
void vivod ( char *m,int n);
 
void main (void)
{char m[100];
int k,n;
n=vvod (m,100,&k);
udal (m,n,k);
vivod (m,n);
}
int vvod ( char *m, int n, int *k)
{int i;
scanf("%d",&*k);
for (i=0;i<n;i++) {scanf("%c",&*(m+i)); if (*(m+i)==' ') return i;};
}
void udal ( char *m, int n, int k)
{int i;
for (i=0;i<n;i++) *(m+i)=*(m+k+i);}
void vivod ( char *m,int n)
{int i;
for (i=k;i<n;i++) printf("%c",m[i]);
}
В чем ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2013, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов из строки (C++):

Удаление элементов со строки - C++
Нужно ввести с клавиатуры строку и число, число элементов которые нужно удалить с левой стороны строки. И вывести строку уже без удаленных...

Удаление элементов строки - C++
Извините, если задача покажется вам банальной, но я что-то никак не могу разобраться. В строку вводится телефонный номер (тип данных...

Удаление из строки повторяющихся элементов (через функцию) - C++
Добрый день! #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; //Удаление повторяющихся элементов в алфавите ...

Сохранение строки в массив и удаление повторяющихся элементов массива - C++
Нужно сделать так, что бы строка занасилась в массив без повтора элементов.(к примеру строка: &quot;Травка зеленеет, солнышко блестит.&quot; , а в...

Здесь есть удаление столбца, как добавить удаление строки - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int n; do {cout &lt;&lt; &quot;Razmer massiva: &quot;; cin &gt;&gt; n;...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один)) - C++
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со своей библиотекой, которая включает в себя...

6
kostya-vrn
10 / 10 / 4
Регистрация: 16.03.2013
Сообщений: 30
16.03.2013, 18:59 #2
а какая у тебя проблема с программой?
0
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
16.03.2013, 19:24  [ТС] #3
Как положено не работает, программа должна удалять k элементов из строки.

Добавлено через 4 минуты
опечатка
C++
1
2
3
4
void vivod ( char *m,int n)
{int i;
for (i=0;i<n;i++) printf("%c",m[i]);
}
Добавлено через 16 минут
help
0
Dragsaw
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 6
16.03.2013, 19:57 #4
по-моему, ошибка в том, что при удалении элементов нужно уменьшать и размер самой строки, т.е. присваивать значение NULL новому последнему элементу. если удаляется k элементов, последний элемент строки станет *(n-k).
так что в функции udal нужно добавить строку
C++
1
&*(n-k)=NULL;
(я со ссылками пока не очень знаком, поэтому может быть не такая строка, но, надеюсь, смысл понятен)
0
kostya-vrn
10 / 10 / 4
Регистрация: 16.03.2013
Сообщений: 30
16.03.2013, 21:26 #5
Можно ничего не удалять, а сделать счетчик S(количество удаленных элементов) и выводить не весь массив символов, а на S элементов меньше.
1
Militer
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 44
16.03.2013, 21:33  [ТС] #6
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
#include <stdio.h>
int vvod ( char *m, int n, int *k);
void udal ( char *m,int n, int k);
void vivod ( char *m,int n,int k);
 
void main (void)
{char m[100];
int k,n;
n=vvod (m,100,&k);
udal (m,n,k);
vivod (m,n,k);
getchar ();
getchar ();
 
}
int vvod ( char *m, int n, int *k)
{int i;
printf("\nvvedite kol-vo udal simvolov ");
scanf("%d",&*k);
printf("\nvvedute stroku vvod ogranichen 0\n");
for (i=0;i<n;i++) {scanf("%c",&*(m+i)); if (*(m+i)=='0') return (i-1);};
 
}
void udal ( char *m, int n, int k)
{int j;
 
for (j=0;j<n;j++) *(m+j)=*(m+k+j+1);}
void vivod ( char *m,int n,int k)
{int i;
for (i=0;i<n-k;i++) printf("%c",m[i]);
}
исправил,заработала,но мне кажется,что все как-то криво )
0
kostya-vrn
10 / 10 / 4
Регистрация: 16.03.2013
Сообщений: 30
16.03.2013, 22:18 #7
ты же это все не за сумму с 10 нулями делаешь и поэтому все должно быть по высшему классу.
0
16.03.2013, 22:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2013, 22:18
Привет! Вот еще темы с ответами:

8. Найти среднее арифметическое элементов каждой строки матрицы Q(l,m) и вычесть его из элементов этой строки - C++
желательно с коментариями

Замена первых элементов каждой строки квадратной матрицы на сумму элементов этой строки - C++
Замена первых элементов каждой строки квадратной матрицы на сумму элементов этой строки

Удаление строки из файла\либо удаление самого файла. - C++
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE *fout; open_file(&quot;abase.dat&quot;); ...

Найти среднее арифметическое элементов каждой строки матрицы Q (lm) и отнять его от элементов этой строки. размер матрицы 7х7.заранее спасибо - C++
Найти среднее арифметическое элементов каждой строки матрицы Q (lm) и отнять его от элементов этой строки.. размер матрицы 7х7.заранее...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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