2013-11-09 5 views
1

Я переношу программу с Perl на C++ в качестве учебной цели. Я прибыл в рутине, которая рисует таблицу с командами, как следующее:Перенос Perl на C++ `print ' x {2501}" x 12; `

Perl: print "\x{2501}" x 12; 

И он рисует 12 раз в «━» («коробочный рисунки тяжелый горизонтальный»).

Теперь я понял, часть проблемы уже:

Perl: \x{}, \x00  Hexadecimal escape sequence; 
C++: \unnnn 

Для печати одного символа Unicode:

C++: printf("\u250f\n"); 

Но делает C++ есть умный эквивалент для оператора «х», или будет это сводится к циклу for?


UPDATE Позвольте мне включать полный исходный код, который я пытаюсь компилировать с предложенным решением. Компилятор делает добавлять еще ошибки:

g++ -Wall -Werror project.cpp -o project 
project.cpp: In function ‘int main(int, char**)’: 
project.cpp:38:3: error: ‘string’ is not a member of ‘std’ 
project.cpp:38:15: error: expected ‘;’ before ‘s’ 
project.cpp:39:3: error: ‘cout’ is not a member of ‘std’ 
project.cpp:39:16: error: ‘s’ was not declared in this scope 


#include <stdlib.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <string.h> 
#include <iostream> 

int main (int argc, char *argv[]) 
{ 
     if (argc != 2) 
     { 
       fprintf(stderr , "usage: %s matrix\n", argv[0]); 
       exit(2); 
     } else { 
       //std::string s(12, "\u250f"); 
       std::string s(12, "u"); 
       std::cout << s; 
     }  
} 
+0

Связанный: [Умножить char целым числом (C++)] (http://stackoverflow.com/q/2596953), [В C++ я думал, что вы можете сделать «string times 2» = stringstring?] (Http://stackoverflow.com/q/5145792), [Умножение строки на int в C++] (http://stackoverflow.com/q/11843226) –

+0

C использует 'printf'. В C++ мы предпочитаем 'std :: cout <<'. –

ответ

2

Нет, C++ не имеет «х» оператор, однако вы можете создать строку с повторением символов:

std::string s(12, <any character>); 

Затем вы можете распечатать его, как ниже («Printf» наследуется от C, это может быть не очень хорошо, чтобы использовать его в присваивание):

std::cout << s; 

(конечно, вы можете использовать любое количество, а не только 12)

UPDATE для обновления выше:

Я могу компилировать код лишь незначительные изменения («U» заменяется на «и», потому что он должен быть характер). Мой компилятор - GCC 4.6.2 для Windows XP (версия MINGW32). Какой OS/компилятор вы используете?

+1

Или, более прямо, 'std :: cout << std :: string (12, '\ u250f');' –

+0

@LightnessRacesinOrbit Мне нужно, чтобы Google для cout vs printf тоже, я думаю. – jippie

+1

@jippie: Нет, не Google это. Прочитайте [рекомендуемую книгу] (http://stackoverflow.com/q/388242/560648). –

Смежные вопросы