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

Сортировка строк - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ неверный ввод http://www.cyberforum.ru/cpp-beginners/thread372835.html
cout<<"\tViberite variant vvoda:\n\n"; cout<<"\t1.Vvod vruchnuy\n"; cout<<"\t2.Iz faila"; int menu=0; cout<<"\n\nVash variant ? (1 or 2): "; cin>>menu; /*while(menu!=1 || menu !=2) Почему данный цикл не работает?(конешно /**/убираю))) { cout<<"Error.Vvedite vash variant: "; cin>>menu;
C++ Подскажите что обозначают выделенные строки. Что обозначают 10,11 и 12 строки??? Заране спасибо. Я знаю что printf -вывод параметров на дисплей, а \n -управляющая последовательность. Но в итоге что обозначают 10,11 и 12 строки я понять не могу. Листининг программы.#include<iostream.h> #include<stdio.h> #include<math.h> int main() { double x1,x2,dx,a,b,c,f; printf("Enter x1,x2,dx,a,b,c \n"); scanf("%lf %lf %lf %lf %lf... http://www.cyberforum.ru/cpp-beginners/thread372815.html
C++ Програмно создать txt файл..
Народ как создать txt файл програмно на c++.? Заранее благодарен)
Составить программу C++
.Составить программу, которая будет выводить таблицу квадратов для последовательности целых чисел.(C++)
C++ Необходимо найти максимальный элемент во второй части матрицы. http://www.cyberforum.ru/cpp-beginners/thread372792.html
Задачи 1) Дан двухмерный массив A размерностью n n (Матрица). Если провести диагонали, то матрицу можно разделить на 4 частей: Необходимо найти максимальный элемент во второй части матрицы. картинка в файле ворд
C++ Вычисление функции по формуле Пробовал написать код, но не получается: #include <iostream> #include <cmath> using namespace std; void main () //Руссификация {setlocale(LC_ALL,"Russian"); double x,u,b,a; for((a=0,a<=1,a=a+0.25);;(b=0.5,b<=0.8,b=b+0.1)); подробнее

Показать сообщение отдельно
Dominion50
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 8
02.11.2011, 09:43  [ТС]     Сортировка строк
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int _tmain(int argc, _TCHAR* argv[])
{
  setlocale( LC_ALL,"Russian" );
 
  char *str = new char [1024];
 
  //Открывает файл для чтения
 
  ifstream b_file;
 
  b_file.open("D:\\text1.txt");
 
  b_file>> str;
 
  printf("В файле находится строка %s \n", str );
 
  cin.get(); //Ожидание нажатия клавиши
 
  return 0;
В файле находится "Hello world !" ,но почему то в str записывается только "Hello"!

И ещё: как в файле перейти на вторую строку и сохранить всю строку в новой переменной?

Добавлено через 13 часов 25 минут
В общем что я насобирал:
1.Есть рабочая сортировка
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
void filter(const char* str, char** destlist);
void sort(char** strlist, int strcnt);
 
int main()
{
    char   str[80];
    char** strlist;
    int    delimcnt = 0;
 
    cin.getline(str, 80);
    
    for(int i = 0; str[i] != '\0'; i++)
        if(str[i] == ',' || str[i] == '.')
            delimcnt++;
 
    if(delimcnt == 0) {
        cout << "Wrong input string\n";
        return 1;
    }
 
    strlist = new char*[delimcnt];
    for(int i = 0; i < delimcnt; i++)
        strlist[i] = new char[20];
 
    filter(str, strlist);
    sort(strlist, delimcnt);
 
    for(int i = 0; i < delimcnt; i++)
        cout << strlist[i] << endl;
    getchar();
    getchar();
    return 0;
}
 
void filter(const char* str, char** destlist)
{
    for(int i = 0, j = 0, k = 0; str[i] != '\0'; i++) {
        if(str[i] == ',' || str[i] == '.') {
            // Если j не равно нулю, то прибавить единицу, дабы не скопировать запятую
            strncpy
                (destlist[k], str + j + (j != 0), i - j - (j != 0));
            destlist[k][i-j] = '\0';
            k++;
            j = i;
        }
    }
}
 
void sort(char** strlist, int strcnt)
{
    for(int i = 0; i < strcnt - 1; i++)
        for(int j = i + 1; j < strcnt; j++)
            if(strcmp(strlist[i], strlist[j]) > 0) {
                char* tmp = strlist[i];
                strlist[i] = strlist[j];
                strlist[j] = tmp;
            }
}
Но её надо немного доработать!

2)
Чтение из файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main( void ) 
{
FILE *file;
char* file_name = "text1.txt";
char load_string[50] = "none";
 
 
file = fopen_s( file_name, "r" );
if( file != 0 )
{
fgets( load_string, 50 , file ); 
}
printf("%s \n" , load_string);
getchar();
getchar();
Но в load_string записывается только первая строка файла!

Как мне объеденить в одно целое эти две программы?

Добавлено через 25 минут
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
75
76
77
78
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <clocale>
 
using namespace std;
 
 
void filter(const char* str, char** destlist);
void sort(char** strlist, int strcnt);
 
void main( void ) 
{
setlocale(LC_ALL,"Russian");
setlocale(LC_ALL,"rus");
FILE *file;
char* file_name = "text1.txt";
char str[100] = "none";
char** strlist;
int    delimcnt = 0;
 
 
file = fopen( file_name, "r" );
if( file != 0 )
{
fgets( str, 50 , file ); 
}
printf("%s \n" , str);
 
 
for(int i = 0; str[i] != '\0'; i++)
                if(str[i] == ',' || str[i] == '.')
                        delimcnt++;
 
        if(delimcnt == 0) {
                cout << "Wrong input string \n";
 
        }
 
        strlist = new char*[delimcnt];
        for(int i = 0; i < delimcnt; i++)
                strlist[i] = new char[20];
 
        filter(str, strlist);
        sort(strlist, delimcnt);
 
        for(int i = 0; i < delimcnt; i++)
                cout << strlist[i] << endl;
        getchar();
        getchar();
 
}
 
void filter(const char* str, char** destlist)
{
        for(int i = 0, j = 0, k = 0; str[i] != '\0'; i++) {
                if(str[i] == ',' || str[i] == '.') {
                        // Если j не равно нулю, то прибавить единицу, дабы не скопировать запятую
                        strncpy
                                (destlist[k], str + j + (j != 0), i - j - (j != 0));
                        destlist[k][i-j] = '\0';
                        k++;
                        j = i;
                }
        }
}
 
void sort(char** strlist, int strcnt)
{
        for(int i = 0; i < strcnt - 1; i++)
                for(int j = i + 1; j < strcnt; j++)
                        if(strcmp(strlist[i], strlist[j]) > 0) {
                                char* tmp = strlist[i];
                                strlist[i] = strlist[j];
                                strlist[j] = tmp;
                        }
}
Вот что получилось! Но есть пару недочётов:
1)в строку записываются с файла только первая строка
2) Не понял пока как пропустить первые 3-и буквы, на подобии "ЗАО",""OAO" и т.п.
3) При выводе отсортированных слов в конце их дописывается "Н"
 
Текущее время: 17:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru