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

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

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

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

08.11.2009, 08:39. Просмотров 422. Ответов 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     Массивы.
Посмотрите здесь:

массивы C++
C++ массивы
массивы C++
Массивы C++
C++ массивы
Массивы C++
C++ c++ массивы
Массивы C++
Массивы C++
Массивы C++
Массивы A[15], D[15] C++
Массивы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4663 / 2489 / 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
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,341
08.11.2009, 09:31     Массивы. #3
Min_Fin, перед делением на подстроки я преложил бы тебе заглянуть в строку S и посмотреть, что она из себя представляет. А там уж разбираться, откуда В НЕЙ берутся лишние символы.

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

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


Вывод сюда.
...Ну или cout используй.
Yandex
Объявления
08.11.2009, 09:31     Массивы.
Ответ Создать тему
Опции темы

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