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

Задача со строками - C++

Восстановить пароль Регистрация
 
C1keu
1 / 1 / 0
Регистрация: 19.02.2010
Сообщений: 32
24.10.2011, 12:46     Задача со строками #1
Есть задача с 4 условиями.2 из них сделал,но 2 не правильно работает.Еще нужно сделать 2.Помогите пожалуйста=)
1)Определить минимальную длину слова.2)Проверить есть ли в указанном слове согласные буквы.3)Выдаьть на печать все слова начинающиеся с гласной буквы.4)Заменить на ps первое вхождение x.
Код по частям
Здесь я разбил текст на слова
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
main()
{
 char A[100],B[30][20],C[6]={'e','y','u','i','o','a'};
 char D[20]={'q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 int i,j,m,l,n,min,k;
 puts("Введите текст");
 gets(A);
 n=strlen(A);
 i=0;j=0;
 for(l=0;l<n;l++)
 if(A[l]!=' '){B[i][j]=A[l];j++;}
 else{B[i][j]='\0';i++;j=0;}
 B[i][j]='\0';i++;
 m=i;
Нашел и вывел минимальное
C++
1
2
3
4
5
6
7
8
 min=1000;
 for(i=0;i<m;i++)
 {
  n=strlen(B[i]);
  printf("n=%d\n",n);
  if(n<min)min=n;
 }
 printf("min=%d\n",min);
Проверяю на согласные буквы(как раз не правильно работает)
C++
1
2
3
4
5
6
7
8
 printf("Введите номер слова=");
 scanf("%d",&k);
 n=strlen(B[k]);
 l=0;
 for(i=0;i<n;i++)
 for(j=0;j<20;j++)
 if(B[k][i]==D[j])l=1;
 if(l==0) puts("Нет согласных");else puts("Есть согласные");
Просто выводит текст уже разбитый на слова
C++
1
2
3
4
 puts("Полученный текст");
 for(i=0;i<m;i++)
 puts(B[i]);
}
Добавлено через 18 часов 29 минут
Ребят,проблемма все еще актуальна =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
24.10.2011, 13:51     Задача со строками #2
Цитата Сообщение от C1keu Посмотреть сообщение
Проверяю на согласные буквы(как раз не правильно работает)
исходя из концепции функция работает правильно, другое дело вот это
C
1
2
3
4
puts("Полученный текст");
 for(i=0;i<m;i++)
 puts(B[i]); //массив-то двумерный
}
вообще я советую полностью переписать программу где в качестве исходного предложения использовать не двумерный массив, а указатель
C
1
char *
кроме того если вы пишете на Си, то посмотрите (хоть бы и в вики) string.h, там описаны все функции библиотеки, которые тут очень даже понадобятся. Не жалейте пробелов в коде, так его легче читать.

Мимоходом свой вопрос решу. у меня после обновы до gcc-4.6 появился такой фокус, вызывающий сегфолт. Если присваивать через промежуточный байт, то все в норме. Что это? На 4.5 работало. Если можно без лишней воды и только если известно в чем дело.
C
1
2
3
4
5
6
char *a = "123456";
int i = 0;
while(a[i + 1] != 0 /*'\0'*/)
    a[i] = a[1 + i++];
    //a[i] = a[i + 1]; ++i;  варианты
    //a[i] = a[++i];
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
24.10.2011, 13:58     Задача со строками #3
C1keu, в таки случаях говори: я ввёл ТО-ТО И ТО-ТО и была ошибка.
Чтобы я не тратил время на поиск варианта, который даёт ошибку.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.10.2011, 14:05     Задача со строками #4
Цитата Сообщение от alkagolik Посмотреть сообщение
Мимоходом свой вопрос решу. у меня после обновы до gcc-4.6 появился такой фокус, вызывающий сегфолт. Если присваивать через промежуточный байт, то все в норме. Что это? На 4.5 работало. Если можно без лишней воды и только если известно в чем дело.
Создается указатель на строковую константу и затем идет попытка эту константу изменить.
Yandex
Объявления
24.10.2011, 14:05     Задача со строками
Ответ Создать тему
Опции темы

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