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

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

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

Массивы. - C++

08.11.2009, 08:39. Просмотров 429. Ответов 2
Метки нет (Все метки)

Имеется программа. Из файла считываю данные в массив. Далее этот массив делю на подстроки и вывожу на печать. Вот в чем проблема: если массив задать в самом коде (char S[6]="12 45"), то все работает нормально. Если же данные считываю из файла, то на печать помимо самого массива выводятся посторонние символы. Вот код:

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
#include <stdio.h>
#include <iostream.h>
#include <windows.h>
 
 
int main(){
    FILE *f = fopen("input.txt", "r");
    char S[6];
        int z=0;
char c;
while((c=getc(f))!=EOF)
{
    S[z] = c;
    z++;
}
 
 
char *a[6]; //массив подстрок
char* pS;    //объявляет указатель на строку
char* Del=" .,"; //объявляет и инициализирует указатель на строку разделителей
pS = strtok (S, Del); //инициализирует указатель адресом первого слова
 
//деление на подстроки:
if (pS) {
    a[0] = pS;
}    
int x,i;
int flag;
flag = 1;
i=0;
x = 1;
while (pS)
{
    do
    {
    pS = strtok(NULL, Del);
    if (pS) {
        a[i+1] = pS;
        i=i+1;
        x = x+1;
        }
    else flag = 0;
}
    while (flag=0);
    }
 
//вывод на эран подстрок:
for (i=0; i<x; i++)
{
 
cout << a[x-1 - i];
cout << " ";
}
 
return 0;
 
}
Добавлено через 19 минут
Сорри за дублирование темы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2009, 08:39     Массивы.
Посмотрите здесь:

Даны массивы а и b. Получить новые массивы a и b, элементы которых вычисляются по правилу: ai=bi, bi= -ai - Pascal
Даны массивы а и b, состоящие из n-элементов каждый. Получить новые массивы a и b, элементы которых вычисляются по правилу: ai=bi, bi=...

Упорядочить массивы по по убыванию, потом соединить массивы в один упорядоченный массив - C (СИ)
Начала писать, запуталась Даны два одномерных массива состоящие из 10 целых чисел. Упорядочить массивы по по убыванию, потом соединить...

Даны массивы A(8), F(8),Q(8). Сформировать массивы С(8), каждый элемент которого вычисляется по формуле - Pascal ABC
uses crt; type mas=array of integer; var A,F,Q,C:mas; i,s:integer; begin clrscr; writeln('Массив первый:'); for i:=1...

Табулирование функции и поиск данных. Одномерные массивы. Двумерные массивы - C#
Вычислить сумму первых четырех отрицательных элементов. В соответствии с п. 5.16 правил &quot;Запрещено создавать темы с множеством...

Массивы. Циклические алгоритмы (Заполнить массивы случайными числами, лежащими в интервале 0 до 100) - C++
Доброго дня, уважаемые форумчане, помогите пожалуйста решить задание. Заполнить массивы случайными числами, лежащими в интервале 0 до...

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) - C++
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Файлы. Компоненты - массивы чисел. Переформировать файл, где сначала идут массивы с положительными макс. элементами - Turbo Pascal
Здравствуйте!! я пишу такую задачу: нужно написать две программы, одна из них создает файл, где компоненты - массивы вещ. чисел; ...

Попадание точки. Массивы чисел. Массивы записей. - C++
Всем привет. По языкам задали три контрольные на си. Я сам си не знаю, даже не представляю, поэтому очень нужна ваша помощь. ...

Многомерные массивы, как перебирать внутренние массивы - C++
Здравствуйте. Такой учебный код и плохо понимаю как перебираются внутренние массивы, может кто пояснит подоходчивее. Именно внутренний...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.11.2009, 09:07     Массивы. #2
Код не очень у Вас:
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
#include <stdio.h>
#include <iostream.h>
#include <windows.h>
 
 
int main(){
FILE *f = fopen("input.txt", "r");
char S[6];
int z=0;
char c;
while((c=getc(f))!=EOF)
{
    S[z] = c;
    z++;
}
 
 
char *a[6]; //Г¬Г*Г±Г±ГЁГў ïîäñòðîê
char* pS; //îáúÿâëÿåò ГіГЄГ*Г§Г*òåëü Г*Г* ñòðîêó
char* Del=" .,"; //îáúÿâëÿåò ГЁ ГЁГ*èöèГ*ëèçèðóåò ГіГЄГ*Г§Г*òåëü Г*Г* ñòðîêó Г°Г*çäåëèòåëåé
pS = strtok (S, Del); //ГЁГ*èöèГ*ëèçèðóåò ГіГЄГ*Г§Г*òåëü Г*äðåñîì ïåðâîãî ñëîâГ*
 
//äåëåГ*ГЁГҐ Г*Г* ïîäñòðîêè:
if (pS) {
a[0] = pS;
} 
int x,i;
int flag;
flag = 0;
i=0;
x = 1;
while (pS)
{
do
{
pS = strtok(NULL, Del);
if (pS) {
a[i+1] = pS;
i=i+1;
x = x+1;
}
else flag = 1;
}
while (flag==0);
}
 
//âûâîä Г*Г* ГЅГ°Г*Г* ïîäñòðîê:
for (i=0; i<x; i++)
{
 
cout << *a[x-1 - i];
cout << " ";
}
 
return 0;
 
}
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
08.11.2009, 09:31     Массивы. #3
Min_Fin, перед делением на подстроки я преложил бы тебе заглянуть в строку S и посмотреть, что она из себя представляет. А там уж разбираться, откуда В НЕЙ берутся лишние символы.

Для этого перед делением на подстроки напиши так:

C++
1
2
S [Z]= 0;
printf ("%s\n", S);


Вывод сюда.
...Ну или cout используй.
Ответ Создать тему
Опции темы

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