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

Что то не то с функцией strtok!!! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Maskca
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
19.12.2009, 18:11     Что то не то с функцией strtok!!! #1
Вот есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<string.h>
#include<iostream.h>
 
int main()
{
char *string1 = "sdfsdf sdfs gjhg 1 h5jj";
char *string2 = "sdfsd sdfsde ghg 2 hjj";
 
string1 = strtok(string1," ");
string2 = strtok(string2," ");
 
while (string1){
 
string1 = strtok(NULL," ");
 
 
cout<<string1<<endl;
 
}             
 
}
Почему, когда я вывожу string1 после прохождения через функцию strtok мне выводит строку string2 прошедшую через функцию strtok?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
19.12.2009, 18:17     Что то не то с функцией strtok!!! #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<string.h>
#include<iostream.h>
 
int main()
{
char *string1 = "sdfsdf sdfs gjhg 1 h5jj";
char *string2 = "sdfsd sdfsde ghg 2 hjj";
 
string1 = strtok(string1," ");
//string2 = strtok(string2," ");
 
while (string1){
 
string1 = strtok(NULL," ");
 
 
cout<<string1<<endl;
 
}
Maskca
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
19.12.2009, 18:21  [ТС]     Что то не то с функцией strtok!!! #3
а мне нужно две строки обработать, тоисть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<string.h>
#include<iostream.h>
 
int main()
{
char *string1 = "sdfsdf sdfs gjhg 1 h5jj";
char *string2 = "sdfsd sdfsde ghg 2 hjj";
 
string1 = strtok(string1," ");
string2 = strtok(string2," ");
 
while (string1&&string2){
 
string1 = strtok(NULL," ");
string2 = strtok(NULL," ");
 
cout<<string1<<endl;
cout<<string2<<endl;
 
}             
 
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
19.12.2009, 18:24     Что то не то с функцией strtok!!! #4
одновременно не выйдет.., нужно по очереди их обрабатывать.
Maskca
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
19.12.2009, 19:51  [ТС]     Что то не то с функцией strtok!!! #5
А что можно сделать если мне нада проверить наличие слова из одной строки в другой с помощью функции strstr
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.12.2009, 20:31     Что то не то с функцией strtok!!! #6
Это тот случай, когда лучше самоделки использовать.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#define WRDSIZ 255
 
/* указатель на следующее слово в строке, или 0, если слова кончились */
 
char *nextWord(char *str){
        char *p;
        for ( p = str; *p != '\0' && !isspace(*p) && !ispunct(*p); p++ )
                ;
 
        if ( *p == '\0' )
                return NULL;
 
        while ( isspace(*p) || ispunct(*p) )
                p++;
 
        return ( *p == '\0' ) ? NULL : p;
}
 
/* 
*   возвращает одно слово из строки str в буфере wrd. динна wrd = len - 1
*   в случае неудачи вернёт NULL
*/
 
char *getWord(const char *str, char *wrd, size_t len){
    char *p;
    char *w;    
 
    for ( p = (char *)str, w = wrd;  *p != '\0' && !isspace(*p) && !ispunct(*p) && --len > 0; p++, w++ )
        *w = *p;
    *w = '\0';
 
    return wrd;
}
 
/* поиск слова из одной строки в другой */
 
 
int main(void){
    char str1[BUFSIZ], str2[BUFSIZ], wrd1[WRDSIZ], wrd2[WRDSIZ], *p, *pstr1, *pstr2;
    
    while ( 1 ){
        printf("First: ");
        if ( !fgets(str1, BUFSIZ, stdin) )
            exit(1);
        if ( p = strrchr(str1, '\n') )
            *p = '\0';
        if ( !*str1 )
            exit(0);
        printf("Second: ");
        if ( !fgets(str2, BUFSIZ, stdin) )
            exit(1);
        if ( p = strrchr(str2, '\n') )
            *p = '\0';
        if ( !*str2 )
            exit(0);
            
        for ( pstr1 = str1; pstr1 != NULL; pstr1 = nextWord(pstr1) ){
            getWord(pstr1, wrd1, WRDSIZ);
            for ( pstr2 = str2; pstr2 != NULL; pstr2 = nextWord(pstr2) ){
                getWord(pstr2, wrd2, WRDSIZ);
                if ( !strcmp(wrd1, wrd2) )
                    printf("%s\n", wrd1);
            }
        }
        printf("\n");
    }
    
    exit(0);
}
Yandex
Объявления
19.12.2009, 20:31     Что то не то с функцией strtok!!!
Ответ Создать тему
Опции темы

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