0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
1 | |
Работа со строками26.11.2008, 02:45. Показов 1423. Ответов 9
Метки нет (Все метки)
Всем доброго времени суток! Я учу С++ (в вузе) вроде всё делал сам но вот столкнулся с проблемой которую уже долго не магу решить
Вобщем вылаживаю задание, просьба помочь Работа со строками. С клавиатуры вводится последовательность строк. Длина каждой строки – не более 80 символов. Строки состоят из слов, разделенных знаками пунктуации или пробельными символами. Количество строк заранее не известно. Окончание ввода – пустая строка. Для каждой строки захватывать порцию динамической памяти. Использовать массив указателей (100 элементов). Разместить строки в динамической памяти и выполнить соответствующее задание. Это шапка её я сделал. Но вот ещё есть два задания: 1) Подсчитать к-во предложений. Концом предложения считать . ! ? 2) Вывести предложения, не содержащие запятых. ну просто не получается этого сделать((((( Я уже как писал сделал шапку и вобщем вот: Код
#include<stdio.h.> #include<string.h> #include<iostream.h> void main() { int i; char s[80]; char *ps[100]={0}; for (i=0;i<100;i++) { fgets(s,80,stdin); if (strlen(s)==1) break; ps[i]=new char [strlen(s)]; strcpy(ps[i],s); } } ПС занимаю программированием первый год так что прошу не судить сильно если не так что пишу.
0
|
26.11.2008, 02:45 | |
Ответы с готовыми решениями:
9
Работа со строками. Функции работы со строками Работа со строками в С++ Работа со строками Работа со строками |
57 / 53 / 4
Регистрация: 04.05.2008
Сообщений: 272
|
|
26.11.2008, 08:42 | 2 |
Ну на счет первого задания, то тебе надо завести счетчик, например
int c = 0; затем, после того, как ты ввел все строки, и скопировал их в динамическую память, тебе надо в этом же цикле, завести еще один цикл, с проверкой каждого символа на ".!?", если такой символ встречается то значение счетчика увеличиваешь на единицу, в конце значение переменной "c" и будет содержать количество предложений. Добавлено через 3 минуты 50 секунд Во втором задании, ты так же в ранее созданом цикле (из первого задания) можешь сравнивать каждый симовол с "," если она ни разу не встретилась до появления одного из символов ".!?" то выводи эту строчку на экран.
1
|
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
26.11.2008, 10:57 [ТС] | 3 |
0
|
57 / 53 / 4
Регистрация: 04.05.2008
Сообщений: 272
|
|
26.11.2008, 11:45 | 4 |
У меня сейчас времени на это нет, работы много, если есть конкретные проблемы при реализации, постараюсь помочь.
0
|
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
26.11.2008, 12:06 [ТС] | 5 |
Да у меня проблема в том что эту работу ещё в тот четверг нада было сдать: А так ладно, Но тебе за помощь спс
0
|
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
01.12.2008, 00:02 [ТС] | 6 |
Если можеш то помоги разобраться с ошибкой во втором задании. Первое вроде пашет
Код
#include <string> #include <iostream> using namespace std; #include <windows.h> void main() { char vn[]="Введите ваш текст", vb[]="Колличество предложений в вашем тексте:"; CharToOem(vn,vn); CharToOem(vb,vb); int q=0,w,e,t=0; char *pc[100]; char c[80]; printf("%s:\n",vn); for (int i=0;i<100;i++) { fgets (c,100,stdin); w=strlen(c); if(w==1)break; pc[i]=new char[w]; strcpy(pc[i],c); q++; } for (int j=0;j<q;j++) { e=strlen(pc[j]); for(int r=0;r<e;r++) { if(pc[j][r]=='.'||pc[j][r]=='!'||pc[j][r]=='?')t++; } } printf("%s%d\n",vb,t); } Код
#include <windows.h> #include <stdio.h> #include <string.h> void main() { char vn[]="Введите ваш текст", vb[]="Колличество предложений в вашем тексте:"; CharToOem(vn,vn); CharToOem(vb,vb); int q=0,w,e,t=0; char *pc[100]; char c[80]; printf("%s:\n",vn); for (int i=0;i<100;i++) { fgets (c,100,stdin); w=strlen(c); if(w==1)break; pc[i]=new char[w]; strcpy(pc[i],c); q++; } for (int j=0;j<q;j++) { int pred_start = 0; // позиция начала предложения int flag = 0; e=strlen(pc[j]); for(int r=0;r<e;r++) { if(pc[j][r]==',') flag = 1; // если находим запятую, то флаг снимаем if(pc[j][r]=='.'||pc[j][r]=='!'||pc[j][r]=='?') // конец предложения { if (flag = 0) // если запятую не обнаружили { // тут выводим предложение начиная с позиции pred_start, заканчива текущей r for (int a = pred_start; a <= r; a++) printf("%c", pc[j][a]); printf("\n"); }; flag = 0; // снова флаг pred_start = r+1; // нвчало нового предложения } } } } Добавлено через 6 часов 5 минут 13 секунд Неужели никто не знает в чём у меня ошибка? я же уже не прошу написать прогу а просто исправить мою :-\
0
|
57 / 53 / 4
Регистрация: 04.05.2008
Сообщений: 272
|
|
01.12.2008, 08:43 | 7 |
Ты хотя бы опиши, что у тебя за ошибка, приведи пример, что ты вводишь, что у тебя выводит программа, а то не совсем понятно, что искать.
Добавлено через 3 минуты 19 секунд Нашел я твою ошибку, очень распостраненная, сам так раньше ошибался, вобщем ты делаешь не операцию сравнения на 0, а присваивание переменной flag значение 0 правильно будет: Код
if (flag == 0)
0
|
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
01.12.2008, 21:22 [ТС] | 8 |
Бесконечно благодарен!
Там ошибка ещё одна была но с флагом основная.
0
|
17 / 16 / 6
Регистрация: 20.11.2008
Сообщений: 81
|
|
02.12.2008, 17:11 | 9 |
Проблему решил?!?!?!
Ну а вообще эту прогу можно было написать кодом в 2-3 раза меньше используя функции strtok() и strstr()...
0
|
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 10
|
|
03.12.2008, 22:49 [ТС] | 10 |
0
|
03.12.2008, 22:49 | |
03.12.2008, 22:49 | |
Помогаю со студенческими работами здесь
10
Работа со строками Работа со строками Работа с строками Работа со строками C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |