Кодировка в вижуал си++.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Tofy, 15 Mar 2011.

  1. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    У меня возникает проблемма,работа со строкой.Нужно определить самое короткое слово не меньше 3 букв.
    Вроде поставил
    setlocale(LC_ALL,"RUS");
    но когда делаешь действия с введенными на русском словами,то кодировка не русская и появляются каракули,кто знает как исправить?
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    #include <locale.h>

    using namespace std;
    void main()
    { setlocale(LC_ALL,"RUS");
    const int n=100,kol=10;
    typedef char String[n];
    String s,mas[kol];
    cout<<"Введите строку: ";
    cin.getline(s,100);
    cout<<s<<endl;
    int k=0;
    char* token=strtok(s," ");
    while (token)
    {
    strcpy(mas[k++],token);
    token= strtok(NULL," ");
    }
    cout<<"Массив слов\n";
    for (int i=0;i<k;i++)
    cout<<mas<<" Букв в слове - "<<strlen(mas)<<endl;
    String t;
    for (int i=0;i<k;i++)
    for (int j=k-1;j>i;j--)
    if(strcmp(mas[j],mas[j-1])<0) {
    strcpy(t,mas[j]);
    strcpy(mas[j],mas[j-1]);
    strcpy(mas[j-1],t);
    }
    cout<<"Массив слов после сортировки:\n";
    for ( int i=0;i<k;i++)
    cout<<mas<<endl;

    if ((strlen(mas[0]))<=3) cout<<"Самое короткое слово: "<<mas[0];
    else cout<<"Самого короткого слова <3, нету ";
    getch();

    }
     
  2. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    попробуй что-то одно из этого:
    setlocale (LC_ALL,".1251");
    SetConsoleOutputCP(1251);
    CharToOem(string, string);
    cout << _T("Your string");
     
  3. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Плохо тебя понял....
    error C3861: SetConsoleOutputCP: идентификатор не найден
    проблемма не решена.
     
  4. Radish

    Radish New Member

    Joined:
    9 Jan 2011
    Messages:
    20
    Likes Received:
    2
    Reputations:
    2
    Если я правильно понял, вам нужно в свойствах консоли поставить шрифт Lucida Console и:
    PHP:
    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
      
    SetConsoleCP(1251);
      
    SetConsoleOutputCP(1251);
      
      return 
    0;
    }
    можно отдельно скомпилировать и запускать при открытии консоли, чтобы не добавлять во все приложения.
     
  5. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    эту конструкцию вставлять всю не пойму ,у меня в примере с не возвращающей стоит.как у меня нужно вставить?
     
  6. Radish

    Radish New Member

    Joined:
    9 Jan 2011
    Messages:
    20
    Likes Received:
    2
    Reputations:
    2
    Если на С:

    PHP:
    #include <iostream.h>
    #include <windows.h>
    void main()
    {
      
    SetConsoleCP(1251); 
      
    SetConsoleOutputCP(1251);
    }
    main - обычная функция если перед её именем стоит тип, то она возвращает его. void - отсутствие возвращаемого значения, но с неё можно выйти передав return.

    http://ru.wikipedia.org/wiki/C++
     
    #6 Radish, 15 Mar 2011
    Last edited: 15 Mar 2011
  7. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    попробуй форматированный вывод и ввод использовать
     
  8. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Блин вы пример мой измените!!а не объясняйте не понятно что,я не понимаю заумных слов! что такое void main или int main -я знаю,и чем отличаются.Язадал вопрос как решить ,напишите полностью код так чтобы получилось в моем примере так как я пытался уже по разному вставлять строки относящиеся к кодировке и не чего не выходит.)
    Мея интересует только Си++!!
     
    #8 Tofy, 16 Mar 2011
    Last edited: 16 Mar 2011
  9. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    попробуй так:
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    #include <locale.h>
    include <windows.h>

    using namespace std;
    void main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int n=100,kol=10;
    typedef char String[n];
    String s,mas[kol];
    cout<<"Введите строку: ";
    cin.getline(s,100);
    cout<<s<<endl;
    int k=0;
    char* token=strtok(s," ");
    while (token)
    {
    strcpy(mas[k++],token);
    token= strtok(NULL," ");
    }
    cout<<"Массив слов\n";
    for (int i=0;i<k;i++)
    cout<<mas<<" Букв в слове - "<<strlen(mas)<<endl;
    String t;
    for (int i=0;i<k;i++)
    for (int j=k-1;j>i;j--)
    if(strcmp(mas[j],mas[j-1])<0) {
    strcpy(t,mas[j]);
    strcpy(mas[j],mas[j-1]);
    strcpy(mas[j-1],t);
    }
    cout<<"Массив слов после сортировки:\n";
    for ( int i=0;i<k;i++)
    cout<<mas<<endl;

    if ((strlen(mas[0]))<=3) cout<<"Самое короткое слово: "<<mas[0];
    else cout<<"Самого короткого слова <3, нету ";
    getch();

    }
     
  10. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    е мае... куда мир катится?
    и ты после этого еще хочешь чтобы у тебя что-то в программировании получалось? НИКОГДА!
    Если не знаешь читай! Сейчас в инете все есть.
     
  11. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    вот-вот
     
  12. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Что вот вот,я сначала поискал в гугле свою проблемму,посидел 2часа пробывал и не выходит с кодировкой,не прошу же решить задачу ,которую я и сам в силах решить,нет не подходит метод
    закорючки везде и при письме строки даже!.
     
  13. Radish

    Radish New Member

    Joined:
    9 Jan 2011
    Messages:
    20
    Likes Received:
    2
    Reputations:
    2
    У меня та же проблема с кодировкой была когда начинал, ну сразу не стал искать, писал транслитом, потом не выдержал и за пару ссылок нашел то что и описал здесь.
    Там было написано изменить шрифт консоли, добавить заголовок
    windows.h (#include <windows.h>) и
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    в начало программы, собственно что тут сложного если базовые знания где ставятся заголовки и где начинается выполнение )
     
  14. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Вставь и проверь что получиться.
    #include <iostream>
    #include <string.h>
    #include <conio.h>
    #include <locale.h>
    #include <windows.h>


    using namespace std;
    void main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int n=100,kol=10;
    typedef char String[n];
    String s,mas[kol];
    cout<<"Введите строку: ";
    cin.getline(s,100);
    cout<<s<<endl;
    int k=0;
    char* token=strtok(s," ");
    while (token)
    {
    strcpy(mas[k++],token);
    token= strtok(NULL," ");
    }
    cout<<"Массив слов\n";
    for (int i=0;i<k;i++)
    cout<<mas<<" Букв в слове - "<<strlen(mas)<<endl;
    String t;
    for (int i=0;i<k;i++)
    for (int j=k-1;j>i;j--)
    if(strcmp(mas[j],mas[j-1])<0) {
    strcpy(t,mas[j]);
    strcpy(mas[j],mas[j-1]);
    strcpy(mas[j-1],t);
    }
    cout<<"Массив слов после сортировки:\n";
    for ( int i=0;i<k;i++)
    cout<<mas<<endl;

    if ((strlen(mas[0]))<=3) cout<<"Самое короткое слово: "<<mas[0];
    else cout<<"Самого короткого слова <3, нету ";
    getch();

    }
     
    #14 Tofy, 17 Mar 2011
    Last edited: 17 Mar 2011
  15. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    какой-то не рациональный код.
    обрабатывай текст посимвольно
     
  16. edge911

    edge911 Active Member

    Joined:
    21 Feb 2009
    Messages:
    105
    Likes Received:
    142
    Reputations:
    15
    [​IMG]
    [​IMG]

    допонел?
     
    #16 edge911, 17 Mar 2011
    Last edited: 17 Mar 2011
  17. Tofy

    Tofy New Member

    Joined:
    21 Nov 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Допер можно было сразу так написать)))
     
    #17 Tofy, 18 Mar 2011
    Last edited: 18 Mar 2011
  18. Linkus

    Linkus Member

    Joined:
    20 Dec 2008
    Messages:
    168
    Likes Received:
    15
    Reputations:
    -1
    Русский текст чтоли никак не мог вывести? я так делаю:

    Code:
    #include "windows.h"
    #include <iostream>
    using namespace std;
    
    #define OutRusText(_string_) CharToOem(_string_,szStr);\
    	cout<< szStr<< endl;
    
    char szStr[512];
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	OutRusText(L"Превед медвед!");
    	return 0;
    }
    
    
    [​IMG]