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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
katka-_-
Сообщений: n/a
#1

Работа с рядками - C++

02.04.2009, 01:57. Просмотров 1866. Ответов 3
Метки нет (Все метки)

Помогите пожалуйста сделать такое задание :
Нада програма которая:
- копирует рядок S в S1 N раз
- отделяет первое слово с рядка S
- сравнивает S и S1 c игнорированием отменностей в регистрах.
- определяет тип рядка (Буквы, Десятковые числа, Двоичные, Шестнадцатеричные)
- выводит количество слов с рядка S
- Значения S, S1 и N вводит пользователь

Стандартными функциями пользоваться нельзя

язык программирования С++ Builder
очень нужно срочно, очень прошу, ребята помогите ! =*
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2009, 01:57     Работа с рядками
Посмотрите здесь:

C++ Работа с рядками. [ЯЗЫК C]
C++ Работа со структурами, работа с векторами.
C++ Работа с битами И Работа с символьными данными
Работа с рядками C++
розробити програму для роботи з рядками C++
Работа с русскими рядками C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.04.2009, 08:14     Работа с рядками #2
- копирует рядок S в S1 N раз
Код
    int i;

    for (i = 0; i < N; i++)
        strcat(s1, s);
- отделяет первое слово с рядка S
Код
    char tmp[100];

    strcpy(tmp, s);
    sscanf(tmp, "%*s%s", s);
- сравнивает S и S1 c игнорированием отменностей в регистрах.
Код
#include <ctype.h>

/* CompareIgnoreCaseLine:  сравнивает строки l1 и l2 без учёта регистра*/
int CompareIgnoreCaseLine(const char *l1, const char *l2)
{
    while (*l1 && *l2 && tolower(*l1) == tolower(*l2))
        l1++, l2++;
    if (*l1 == '\0' && *l2 == '\0')
        return 0;
    return tolower(*l1)-tolower(*l2);    
}

    if (CompareIgnoreCaseLine(s, s1) == 0)
        printf("strings are equal\n");
со стандартными функциями
katka-_-
Сообщений: n/a
05.04.2009, 17:40     Работа с рядками #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
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
 
char strokaS[80];
char strokaS1[1024];
 
union uTypes
{
int i;
double d;
char c;
};
/////////////////////////////////////////////
//Определяем тип строки
/////////////////////////////////////////////
const char * CheckType(const char * szString)
{
uTypes u;
char cCanary;
if (sscanf(szString, "%d%c", &u, &cCanary) == 1) { return "int"; }
if (sscanf(szString, "%f%c", &u, &cCanary) == 1) { return "double"; }
if (sscanf(szString, "%c%c", &u, &cCanary) == 1) { return "char"; }
 
return "string";
}
 
 
/////////////////////////////////////////////
//Преобразует букозяблики в нормальные русские символы
/////////////////////////////////////////////
char* cyr(char* s)
{
unsigned char* p=s;
  while (*p)
  {
    if (*p==184)
    *p+=57;
  else
  {
    if (*p==168)
    *p+=72;
  else
  {
  if (*p>=192&&*p<=239)
    *p-=64;
  else
  {
  if (*p>=240&&*p<=255)
    *p-=16;
  }
  }
  }
   p++;
  }
 
return s;
}
 
/////////////////////////////////////////////
//Сравнивает 2 строки на их похожесть
/////////////////////////////////////////////
int CompareIgnoreCaseLine(const char *l1, const char *l2)
{
    while (*l1 && *l2 && tolower(*l1) == tolower(*l2))
        l1++, l2++;
 
    if (*l1 == '\0' && *l2 == '\0') return 0;
 
    return tolower(*l1)-tolower(*l2);
}
/////////////////////////////////////////////
//
/////////////////////////////////////////////
 
int main(int argc, char* argv[])
{
  char *string;
  int kol=0;
  int k,m=0;
 
  cout << cyr("Введите рядок S: ");
  cin.getline(strokaS,80); //80 это длина текста
 
  cout << cyr("Введите строку S1: ");
  cin.getline(strokaS1,80);
 
  cout << cyr("Введите число копий S: ");
  cin>> kol;
  cin.clear();
 
////////////////////////////////////////////////////
//Копируем в S1 - S kol раз
////////////////////////////////////////////////////
  for (int i = 0; i < kol; i++)
  {
   strcat(strokaS1, strokaS);
  }
 
 cout << "------" << endl;
 cout << cyr("Новое S1= ") << strokaS1 << endl;
 cout << "------" << endl;
////////////////////////////////////////////////////
//Выделяем первое слово из S
////////////////////////////////////////////////////
 string = strchr(strokaS,' ');
 
 if(string)
 {
  strncpy(string,strokaS,string-strokaS);
  cout << cyr("Первое слово S= ") << string << endl;
 }
 else
 {
  cout << cyr("Первое слово S= ") << strokaS << endl;
 }
////////////////////////////////////////////////////
//Количество слов в S
////////////////////////////////////////////////////
 
m=1; //так как всяко в строке уже есть какие то символы
 
for (int i = 0; i < strlen(strokaS); i++)
{
if (strokaS[i]==32)
  {
    k=1;
  }
  else
  {
  if (k==1) {m++; k=0;}
  }
}
 cout << cyr("Всего слов в S= ") << m << endl;
 
////////////////////////////////////////////////////
//Сравниваем S1 и S
////////////////////////////////////////////////////
 if (CompareIgnoreCaseLine(strokaS, strokaS1) == 0)
       cout << cyr("S и S1 одинаковые")<< endl;
       else
       cout << cyr("S и S1 разные")<< endl;
////////////////////////////////////////////////////
//Тип рядка S
////////////////////////////////////////////////////
cout << cyr("Тип рядка S: ")<<CheckType(strokaS)<< endl;
 
 
  getch() ;
        return 0;
}
//---------------------------------------------------------------------------
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.04.2009, 01:25     Работа с рядками #4
Код
    if (strokaS[i] == 32)
        k = 1;
    else if (k == 1) {
        m++;
        k = 0;
    }
в курсе, что пара пробелов если будет идти, один посчитается как слово ?
Yandex
Объявления
06.04.2009, 01:25     Работа с рядками
Ответ Создать тему
Опции темы

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