Выложил частично блок программы в котором вопрос-вопрос по переводу периодической дроби: вопрос следущий я вообще правильно сделал когда функцией strtok выделял указатели на строки и заносил их в массив(при запуске-вроде бы все нормально отделяет и выводитнапример 4.4(45) я разбиваю эту строку на строки a[0]=4a[1]= 4 и a[3]=45 а потом ими оперирую дальше) и 2 вопрос: почему strcat(s1,a[0]) -не cоединяет строки просто я с этими указателями путаюсь(( вот и вопрос
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
//описание функций
int main()
{ int i,j=0,sd1,sd2,nod;
char s[80],a[3],*pa=NULL,*p=NULL,*s1,*s11=new char[17],*s22=new char[17],*s2,*sp1,*sp2,razd[]="().\0\n";
printf("vvedite des9itititnoe chislo\n");
scanf("%s",&s);
p=s;
// здесь еще кусок проги должен но он работает дык что его ввыкладывать нет смысла:)
//вычисления для периодической дроби
{
p = strtok(s,razd);
i=0;
a[i]=p;
while(p = strtok(NULL,razd))
{
i++;
a[i]=p;
}
for(i=0;i<3;i++)
printf("a[%d]=%s\n",i,a[i]);
strcat(s1,a[0]);
strcat(s1,a[1]);
strcat(s1,a[2]);
strcat(s2,a[0]);
strcat(s2,a[1]);
sd1=atoi(s1)-atoi(s2);//числитель
printf("sd1=%s\n",s1);
sd2=pow(10,strlen(a[1]))*9*KOL_9( a[2]); //знаменатель
}
return 0;
}
1 ноября 2008 в 21:03
Александр "Ksandr" Нестеров, STL – это стандартная библиотека для С++. Вы как-то странно изучаете С++, если вы о ней не слыхивали.
1 ноября 2008 в 18:01
мдя(((если я попросил помочь по с++ -это не значит что я должен эту прогу писать на с……к тому же я не понял проги которую написал Сергей-и что такое STL-тож не знаю….я изучаю на данный момент С++
1 ноября 2008 в 1:04
Да называют С++ ибо процедурный С свое отжил в "академических" кругах, а на замену пришел С++ с ООП. А поскольку дальше после всех елементов С, пойдут класы и все с этим связаные принципы ООП и особенности плюсов. То и весь курс называют "С++" при этом дальше используя для ввода/вывода scanf/printf вместо cin/cout.
Все кажись просто как двери, хотя со стороны немного глупо. У нас разделяли С и С++ когда я его учил…наверно зависит от преподавателя
1 ноября 2008 в 1:01
Да, я подразумевал то же, что Сергей. Если использовать stdlib, то зачем С++? Ведь достаточно простого С. Это, кстати общее для большинства рассматриваемых здесь примеров. Люди называют это "С++" и обмениваются знаниями по поводу С-шного runtime-а. Наверно, такие преподы, я не знаю, странно всё это. Если писать на С++, то класс std::string действительно способен сильно упростить жизнь.
31 октября 2008 в 17:03
#include <string>
#include <vector>
using namespace std;
vector<string> tokenize(const string& str,const string& delimiters)
{
vector<string> tokens;
// skip delimiters at beginning.
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// find first "non-delimiter".
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos)
{
// found a token, add it to the vector.
tokens.push_back(str.substr(lastPos, pos – lastPos));
// skip delimiters.Note the "not_of"
lastPos = str.find_first_not_of(delimiters, pos);
// find next "non-delimiter"
pos = str.find_first_of(delimiters, lastPos);
}
return tokens;
}
31 октября 2008 в 17:03
юзайте STL
31 октября 2008 в 14:03
Дмитрий ,как понять твой вопрос: а зачем вам ++?
31 октября 2008 в 10:01
Ребята, а зачем вам ++?
30 октября 2008 в 23:04
int i;
char s[80],*a[3],*p=NULL,*s1,*s2,*sp1,*sp2,razd[]="().\0\n";
{
p = strtok(s,razd);
i=0;
a[0]=p;
while(p = strtok(NULL,razd))
{
i++;
a[i]=p;
}
for(i=0;i<3;i++)
printf("a[%d]=%s\n\n",i,a[i]);
данный кодработает и выдает то что нужно : но проблема в следующим
strcat(a[0],a[1])работает и соединяет строки массива , но strcat(s1,a[1]) -не хочет вообще в чем проблема???-помогите..
30 октября 2008 в 21:05
конечно спасибо но этот код который ты предоставил-выводит строки…а я же написал что как мне запоминать их что бы работать дальше?запоминать указатели вв массив не катит( как мне сказали) а как тогда их запоминать ? конечно есть вариант просмотреть данную строку как масссив и разбить на части -но это просто и требует больше кода…а как это реалтизовать в данном случае?????
30 октября 2008 в 21:05
short j;
while( p = strtok( NULL,razd ) )
{
j=0;
while( p[j] != '/0' )
{
a[i++] = p[j++];
}
}
так попробуй…или не в этом проблема?
30 октября 2008 в 21:03
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
Вот вывод:
Splitting string "- This, a sample string." into tokens:
This
a
sample
string
_______________
если не ошибаюсь то в твоем случае а[i] присваивать не "р", а в цикле смещать "i, j" и присваивать "р[j]" пока (р != NULL)
ну тоесть в цикле доступаться к елементам строки на какую указывает указатель полученый после strtok и присваивать их куда там уже надо.
Индекс для "р" должен отличаться от того что для "а" и начинаться с нуля.
30 октября 2008 в 20:00
…..лана вопрос поставлю так:Как мне запомнить то что выделяет strtokчтобы в дальнейшем работать как со строками?
30 октября 2008 в 19:04
а как посоветуешь насчет этого a[i]=p-я так и знал что это не правильно хотя мне так посоветовали)….вот мне нужно выделять и заносить эти 3 строки и работать с ними-а как ?
30 октября 2008 в 19:02
char s[80],a[3]
strcat(s1,a[0]);
А то, что у тебя в массив СИМВОЛОВ заносятся УКАЗАТЕЛИ – это отдельная проблема. Так делать ни в коем случае нельзя.
Я про a[i]=p;
При этом, естесственно, указатель обрубается до 8 младших бит, и от его былого могущества остается полная х*йня.
30 октября 2008 в 19:01
а разве в массив у меня символы заносятся??
30 октября 2008 в 19:01
у меня заносятся указатели на строку..
30 октября 2008 в 19:00
это черновой вариант мой дык что там есть лишнее -выводы и тд-это все для проверки делалось
30 октября 2008 в 19:00
Посмотри документацию по strcat, и все станет ясно. Ты ее неправильно используешь – она соединяет две строки, а не строку с символом.