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

Пoмогите со строками! - C++

Восстановить пароль Регистрация
 
2009
2 / 2 / 0
Регистрация: 23.11.2009
Сообщений: 35
11.06.2010, 19:50     Пoмогите со строками! #1
Всем привет. В общем, даны 3 задачи:
Дано слово:
1) Подсчитать количество согласных букв.
2) Определить количество вхождений первого символа.
3) Если слово четной длины, то обменять первую половину слова со второй, в противном случае обменять местами первые 2 символа с последними двумя, сохранив порядок следования.

Мои вопросы:
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<conio.h>
#include<iostream.h>
#include<string.h>
#include<stdio.h>
 
void chet(char a[100])
{ int k=0; char b[]={'a','A','o','O','u','U','y','Y','i','I','E','e'};
  for(int i=0;i<strlen(a);i++)    /*Здесь записана программа для подсчета количества гласных букв*/
   for(int j=0;j<strlen(b);j++)  /*и я думаю, что если сменить условие на if(a[i]!=b[j]) программа будет*/  
     if(a[i]==b[j]) k++;           /*искать количество согласных букв, однако она выводит длину строки.*/ 
  cout<<k;                                                         /* ПОЧЕМУ ТАК?((( */  
}
 
void main()
{ clrscr();
  char a[100];
  gets(a);
  chet(a);
  getch();
}
2) Под словом вхождение понимается сколько раз первая буква встречается в строке?
3) Просмотрите пожалуйста. Вроде всё по-моему правильно, а прога все равно неправильно переставляет...
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
#include<conio.h>
#include<iostream.h>
#include<string.h>
#include<stdio.h>
 
void chet(char a[100])
{ char c=a[0],d=a[1],e=a[strlen(a)],f=a[strlen(a)-1],g;
  if(strlen(a)%2==0) { for(int i=0;i<strlen(a)/2;i++)
             { g=a[i];
               a[i]=a[strlen(a)/2+1];
               a[strlen(a)/2+1]=g;
             }
             }
  else { a[0]=f;
     a[1]=e;
     a[strlen(a)]=c;
     a[strlen(a)-1]=d;}
  puts(a);
}
 
void main()
{ clrscr();
  char a[100];
  gets(a);
  chet(a);
  getch();
}
P.S. Очень нужны ответы ко всем, потому что без них я не сдам зачет.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
11.06.2010, 20:37     Пoмогите со строками! #2
вот основные функции для вашего : второго задания и первого
DayFan
19 / 3 / 1
Регистрация: 10.06.2010
Сообщений: 9
11.06.2010, 20:52     Пoмогите со строками! #3
к 3 задаче.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void chet(char a[100])
{ char c=a[0],d=a[1],e=a[strlen(a)-1],f=a[strlen(a)-2],g;
  if(strlen(a)%2==0) { for(int i=0;i<strlen(a)/2;i++)
                         { g=a[i];
                           a[i]=a[strlen(a)/2+i];
                           a[strlen(a)/2+i]=g;
                         }
                     }
  else { a[0]=f;
         a[1]=e;
         a[strlen(a)-2]=c;
         a[strlen(a)-1]=d;}
  puts(a);
}
mrMRak
38 / 38 / 3
Регистрация: 02.06.2010
Сообщений: 105
11.06.2010, 21:04     Пoмогите со строками! #4
в 3ей задаче strlen(a) = будет всегда 100. надо взять чистое слово. без пробелов.
для этого в мейне memset (a,' ',100); - заполняем строку нулями.
а внутри chet - создать указатель и присвоить ему чистую лексему без пробелов
char * pch;
pch = strtok (a," "); а дальше работать с ним как с а.
DayFan
19 / 3 / 1
Регистрация: 10.06.2010
Сообщений: 9
11.06.2010, 21:05     Пoмогите со строками! #5
Цитата Сообщение от mrMRak Посмотреть сообщение
в 3ей задаче strlen(a) = будет всегда 100. надо взять чистое слово. без пробелов.
для этого в мейне memset (a,' ',100); - заполняем строку нулями.
а внутри chet - создать указатель и присвоить ему чистую лексему без пробелов
char * pch;
pch = strtok (a," "); а дальше работать с ним как с а.
Слишком сложно)
2009
2 / 2 / 0
Регистрация: 23.11.2009
Сообщений: 35
12.06.2010, 02:40  [ТС]     Пoмогите со строками! #6
Нет нет..всё правильно DayFan написал,я просто думал что последний элемент строки а будет a[strlen(a)],а оказывается он будет равен a[strlen(a)-1]...с этой задачей разобрались, а как быть с первой? mrMRak, по ссылкам я ничего не нашел...
rrrFer
Заблокирован
12.06.2010, 03:57     Пoмогите со строками! #7
Цитата Сообщение от 2009 Посмотреть сообщение
Нет нет..всё правильно DayFan написал,я просто думал что последний элемент строки а будет a[strlen(a)],а оказывается он будет равен a[strlen(a)-1]...с этой задачей разобрались, а как быть с первой? mrMRak, по ссылкам я ничего не нашел...
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
/* strpbrk example */
#include <stdio.h>
#include <string.h>
 
int main ()
{
  char str[] = "This is a sample string";
  char key[] = "aeiou";
  char * pch;
  int num;
  printf ("Vowels in '%s': ",str);
  pch = strpbrk (str, key);
  num=0;
  while (pch != NULL)
  {
      num++;
    printf ("%c " , *pch);
    pch = strpbrk (pch+1,key);
  }
  printf ("\n");
  printf("%d",num);
  getchar();
  return 0;
}
почти копипаст отсюда
mrMRak
12.06.2010, 03:59
  #8

Не по теме:

rrrFer, угу.. я вот о том же.. все так сложно найти..

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2010, 04:06     Пoмогите со строками!
Еще ссылки по теме:

C++ работа со строками
Работа со строками C++
раьота со строками C++

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

Или воспользуйтесь поиском по форуму:
rrrFer
Заблокирован
12.06.2010, 04:06     Пoмогите со строками! #9
только тут для гласных букв,чтобы считала согласные - измени строчку:
char key[] = "aeiou";
тут перечислены гласные буквы, надо перечислить согласные ))

Добавлено через 4 минуты
если очень ленивый то вторую можно решить из первой ))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int main (){
    char str[] = "ithis is a sample string";
    char key[2];
    key[0]=str[0];
    key[1]=0;
  char * pch;
  int num;
  printf ("Vowels in '%s': ",str);
  pch = strpbrk (str, key);
  num=0;
  while (pch != NULL)
  {
      num++;
    pch = strpbrk (pch+1,key);
  }
  printf ("\n");
  printf("%d",num);
  getchar();
  return 0;
}
Добавлено через 40 секунд
хотя криво это все выглядит
Yandex
Объявления
12.06.2010, 04:06     Пoмогите со строками!
Ответ Создать тему
Опции темы

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