Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Робота со строками


Автор: xxxborland89 23.11.2007, 23:26
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <string.h>
int main (){
int const n=30;
int i, j, k=0;
char s[n];
char *s1;
char *s2;
char a;
cout <<"input string\n";
gets(s);
a=strlen(s);
for (i=0;i<a;i++){
k=0;
s1= strtok(s," ");
for (j=0;j<a;j++){
 s2=strtok(s," ");

     if(s1==s2)k++;

 if(k==1)puts(s1);}}
 getch();
 return 0;}
как сделать что бы при каждой итерацыи цыкла функцыя  strtok()  перескаковала на следуйщее слово  smile 

Автор: archimed7592 23.11.2007, 23:31

 ! 
archimed7592
xxxborland89, пользуемся тегом [CODE]


Цитата(xxxborland89 @  23.11.2007,  23:26 Найти цитируемый пост)
как сделать что бы при каждой итерацыи цыкла функцыя  strtok()  перескаковала на следуйщее слово  smile  


Цитата(xxxborland89 @  23.11.2007,  23:26 Найти цитируемый пост)
 s2=strtok(s," ");

Код
s2 = strtok(NULL, " ");

Автор: xxxborland89 23.11.2007, 23:42
подскажите где у меня ошибка.
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <string.h>
int main (){
int const n=30;
int i, j, k=0;
char s[n];
char *s1;
char *s2;
char a;
cout <<"input string\n";
gets(s);
a=strlen(s);
for (i=0;i<a;i++){
k=0;
s1 = strtok(NULL, " ");
cout<<s1<<" ";
for (j=0;j<a;j++){
 s2 = strtok(NULL, " ");

     if(s1==s2)k++;
// cout<<k<<"\n";
 if(k==1)puts(s1);}}
 getch();
 return 0;}

Автор: archimed7592 23.11.2007, 23:44
Обязательно подскажу как только отредактируешь свой пост, воспользовавшись при этом кнопкой "Код" или тегом CODE.

Автор: MAKCim 23.11.2007, 23:50
xxxborland89, 
прочти внимательно, что написал archimed7592 в первом посте
и отредактируй сообщения

Автор: xxxborland89 23.11.2007, 23:57
Код

# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <string.h>
int main (){
int const n=30;
int i, j, k=0;
char s[n];
char *s1;
char *s2;
char a;
cout <<"input string\n";
gets(s);
a=strlen(s);
for (i=0;i<a;i++){
k=0;
s1 = strtok(NULL, " ");
cout<<s1<<" ";
for (j=0;j<a;j++){
 s2 = strtok(NULL, " ");

     if(s1==s2)k++;
// cout<<k<<"\n";
 if(k==1)puts(s1);}}
 getch();
 return 0;} 

так, что ли?

Автор: archimed7592 23.11.2007, 23:58
Цитата(xxxborland89 @  23.11.2007,  23:57 Найти цитируемый пост)
так, что ли? 

Да.

Ошибка здесь:
Цитата(xxxborland89 @  23.11.2007,  23:57 Найти цитируемый пост)
s1 = strtok(NULL, " ");

Должно быть:
Код
s1 = strtok(s, " ");

Автор: xxxborland89 24.11.2007, 00:03
я это с первого раза понял, но оно всё равно не работает

Автор: archimed7592 24.11.2007, 00:06
Могу только посоветовать обзавестись диоптриями, раз зрение такое плохое.

Автор: xxxborland89 24.11.2007, 00:06
тоисть длжно быть вот так?
Код

# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <string.h>
int main (){
int const n=30;
int i, j, k=0;
char s[n];
char *s1;
char *s2;
char a;
cout <<"input string\n";
gets(s);
a=strlen(s);
for (i=0;i<a;i++){
k=0;
s1 = strtok(s, " ");
cout<<s1<<" ";
for (j=0;j<a;j++){
 s2 = strtok(s, " ");

     if(s1==s2)k++;
// cout<<k<<"\n";
 if(k==1)puts(s1);}}
 getch();
 return 0;}


Автор: archimed7592 24.11.2007, 00:08
Цитата(xxxborland89 @  24.11.2007,  00:06 Найти цитируемый пост)
тоисть длжно быть вот так?

Нет. Читай внимательней.

Автор: xxxborland89 24.11.2007, 00:09
Цитата

Могу только посоветовать обзавестись диоптриями, раз зрение такое плохое. 

Очень смешно. 

Автор: archimed7592 24.11.2007, 00:12
Цитата(xxxborland89 @  24.11.2007,  00:09 Найти цитируемый пост)
Очень смешно.  

Ты не поверишь, но мне тоже смешно видеть человека, который ради того чтобы решить свою проблему не готов хотя бы внимательно прочитать ответы(я молчу о том, чтобы попытаться разобраться самому).

Автор: MAKCim 24.11.2007, 00:13
xxxborland89, 
Код

s1 = strtok(s, " ");
cout<<s1<<" ";
for (j=0;j<a;j++){
 s2 = strtok(NULL, " ");


Добавлено через 1 минуту и 33 секунды
Цитата(xxxborland89 @  24.11.2007,  00:09 Найти цитируемый пост)
Очень смешно.  

 smile 
честное слово смешно, без обид  smile 

Автор: xxxborland89 24.11.2007, 00:16
я только учюсь на 1-м курсе и строки мы прошли буквально за пол пары, поэтому я не совсем их понял!

Автор: MAKCim 24.11.2007, 00:23
Цитата(xxxborland89 @  24.11.2007,  00:16 Найти цитируемый пост)
я только учюсь на 1-м курсе и строки мы прошли буквально за пол пары, поэтому я не совсем их понял! 

ответ был дан во втором посте
читать нужно внимательно
и строки здесь не причем

Автор: xxxborland89 24.11.2007, 00:28
может я чтото не доганяю , но разве здесь оно не заносит, при каждой итерацыи цыкла, в строку s1 символі до первого пробела?
Код

for (i=0;i<a;i++){
k=0;
s1 = strtok(s, " ");
cout<<s1<<" ";

а здесь просто заносит в строку s2 значение строки s без первого слова
Код

for (j=0;j<a;j++){
 s2 = strtok(NULL, " ");


Добавлено через 12 минут и 44 секунды
мне надо:
допустим есть строка: aaa ggg ggg hhh aaa
при 1-й итерацыи s1= aaa
       2-й s1=ggg
       3-й s1=ggg
       4-й s1=hhh
как это сделать ?

Автор: MAKCim 24.11.2007, 00:56
Цитата(xxxborland89 @  24.11.2007,  00:28 Найти цитируемый пост)
мне надо:
допустим есть строка: aaa ggg ggg hhh aaa
при 1-й итерацыи s1= aaa
       2-й s1=ggg
       3-й s1=ggg
       4-й s1=hhh
как это сделать ? 

Код

char str[] = "aaa ggg ggg hhh aaa";
char * ptr;
if ((ptr = strtok(str, " ")) == NULL)
    /* выход */
do {
    /* работа с ptr */
} while ((ptr = strtok(NULL, " ")) != NULL);

Автор: Dov 24.11.2007, 01:20
Код

int main()
{
    const int  n = 30;
    char       s[n];
    char       *s1;

    cout << "input string\n";
    cin.getline(s, n);

    s1 = strtok(s, " ");

    while(s1 != NULL)
    {
        cout << s1 << endl;
        s1 = strtok(NULL, " ");
    }

    getch();
    return 0;
}

Автор: xxxborland89 24.11.2007, 01:26
объясните пожалуйста, что делается в этой строке?
Код

cin.getline(s, n);

Автор: archimed7592 24.11.2007, 01:28
Цитата(xxxborland89 @  24.11.2007,  01:26 Найти цитируемый пост)
объясните пожалуйста, что делается в этой строке?

То же самое, что и в строке
Цитата(xxxborland89 @  23.11.2007,  23:42 Найти цитируемый пост)
gets(s);
с тем лишь отличием, что делается это с ограничением максимального количества вводимых символов(n).


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)