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


Автор: Bart_Simpson 1.4.2007, 11:52
Вот такая вот проблемка немогу понять как сделать подскажите идею есть файл 

3 aaaa bbbb cccccc
2 ddddd vvvvv aaaaaaaa

в каждой строке после слова с указанным номером вставить его номер. Поскажите как лучше найти номер слова и как вставить номер в строку???????????

Автор: Partizan 1.4.2007, 11:56
1 посчитать количество раделителей...
2 сместить всё что после номера на нужное число позиций вправо
3 вставить номер 

Автор: Bart_Simpson 1.4.2007, 11:59
понятно что подсчитать колтчестов разделителей тока вот как я вот пытался и strtok и так вот пробывал не знаю именнно как в С записать!
Код

int OpenReadF (const char* FileName); 
const char endTerm='0';
char Seps[]=" ";
const int bufSize = 255;
char in_buff[bufSize];
const char FileName[]="in.txt";
int main(){
    
    FILE *fnPtr=fopen(FileName,"w");
    if(fnPtr == NULL)
    {
        cout << "File couldnt be open";
    }
    else {
        cout << "Enter ->\n";
    while (_getch()!=endTerm){    
        cin.getline(in_buff, bufSize);
        fprintf(fnPtr,"%s\n",in_buff);
    }}
    fclose(fnPtr);     
    OpenReadF(FileName);
    return 0;
}

int OpenReadF (const char* FileName) {
    char ReadBuff[100];
    char *tokenPtr;
    int num;
    int k,i=0;
    FILE *fnPtr=fopen(FileName,"r");
    if(fnPtr == NULL){
        cout << "File couldnt be open";
    }
    fscanf(fnPtr,"%d",&num);
    while (fgets(ReadBuff,100,fnPtr)){
    /*tokenPtr=strtok(ReadBuff,Seps);
    while (tokenPtr!=NULL){
        printf("%s\n",tokenPtr);
        tokenPtr=strtok(NULL,Seps);
    }*/
    cout << ReadBuff;
    printf("%d",num);
    }
    _getch();
    return 0;
}


Автор: Bart_Simpson 1.4.2007, 12:17
пытась вот так написать и ашипка вылетает

Код

char ReadBuff[100];
for (i=0;i<100;i++){
        if (ReadBuff[i]==Seps) k++;


ашипка такая вот 

.\lr3.cpp(51) : error C2446: '==' : no conversion from 'const char *' to 'int'
        There is no context in which this conversion is possible
.\lr3.cpp(51) : error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]'

Автор: Dov 1.4.2007, 12:35
Bart_Simpson, номер - это однозначное число? И второе: покажи пример выходной строки.

Автор: Xenon 1.4.2007, 12:41
Я чего-то не очень понял что именно требуется. Во всяком случае какая разница какое число - можно же читать с использованием потоков - file >> num >> word >> word 2, так как тут все пробелами разделено.

Автор: Bart_Simpson 1.4.2007, 12:49
да номер однозначное число!
выходная типа такая 

aaaa bbbb cccccc3

Автор: threef 1.4.2007, 12:52
продолжая Xenon
Код

while( !file.eof() )
{
   inFile>>textBuf;
   outFile<<textBuf<<++count;
}
remove(inFileName);
rename(outFileName,inFileName);
 

Автор: Bart_Simpson 1.4.2007, 12:56
Пояснитье поподробней я пока не всё знаю!

Автор: Xenon 1.4.2007, 12:59
threef, Я бы еще добавил перед увеличением счетчика
Код

if (file.fail()) break;

Просто иначе будет лишние "слово" считываться.

Автор: Bart_Simpson 1.4.2007, 13:05
так не а если такая вот фишка будет

3 aaaa bbbb cccccc fffffff ddddddd


aaaa bbbb cccccc3 fffffff ddddddd

оно добавит???

и еще проблема не могу пробелы подсчиатть smile  smile  smile  ошибка и всё


Автор: Dov 1.4.2007, 14:13
Так попробывай.
Код
int main()
{
    FILE* file = fopen("test.txt","r");
    char buf[80];    
   
    if(file == NULL)
    {
        cout << "File couldnt be open";
        return 1;
    }    
    
    while(fgets(buf, 80, file))                  // читаем построчно в buf
    {
        int  i   = 0;
        char tmp = buf[0];                       // первый символ строки - это номер
        int  num = buf[0] - '0';                 // запоминаем его        
        
        while(num--)                             // какой номер, столько раз крутим цикл
        {        
            while(isspace(buf[i + 1]))           // пока в строке пробелы            
                buf[i++] = buf[i + 1];           // смещаемся влево          
            while(!isspace(buf[i + 1]))          // дошли до слова, пока слово, т.е. не пробелы    
                buf[i++] = buf[i + 1];           // смещаемся влево
        }
        buf[i] = tmp;                            // после смещения заносим символ с номером
        printf(buf);                                  
    }
    puts("");
    
    return 0;
}

Автор: Bart_Simpson 1.4.2007, 15:54
Псибо большое действительно работает тока как сделать обработку если вдруг число больше чем слов в строке?

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