对于空格,输出换行,blank line的一些技巧

本文详细介绍了使用C++进行编程时,如何巧妙地输出矩阵元素,包括空格和换行符的处理,以及多组数据之间的分隔。通过具体的代码示例,帮助读者理解并掌握这些实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如空格,1、如果是第一个i = 0;就不输出空格,可以判断if(i);
2、在循环外边先输出一个,在循环里边,如果(1),就输出" ";

对于换行

for(int i = 0; i < n; i++)
	for(int j = 0; j < m; j++)
	{
		cout<<A[i][j];
		if(j == m-1) printf("\n");\\判断j == m-1;
	}

blank line;
多组数据,可以判断t;

while(t--)
{
	if(t) printf("\n"); \\判断t是否为最后一个(即是否为0)
}
" 信号声明对齐脚本 ver 1.0 function! AlignVerilogSignals()range let s:max_type = 0 let s:max_reg = 0 let s:max_bits = 0 let s:max_name = 0 let s:port_list = [] let signal_lines = getline(a:firstline, a:lastline) " 第二阶段:解析内容 for raw_line in signal_lines let line = substitute(raw_line, '\s*$', '', '') " 清理行尾空格 " 处理独立注释行 if line =~ '^\s*//' call add(s:port_list, {'type': 'comment', 'content': line}) continue " 空白行处理(仅记录类型) elseif line =~ '^\s*$' call add(s:port_list, {'type': 'blank'}) continue endif " 处理端口声明 let clean_line = substitute(line, '\s*//.*$', '', '') " 移除行尾注释 let clean_line = substitute(clean_line, '^\s*,', '', '') " 移除行首逗号 " 改进后的正则表达式(支持无空格紧接位宽) let parts = matchlist(clean_line, \ '^\s*\(reg\|wire\)\?\s*\(\[.*\]\)\?\s*\(\w\+\)') if !empty(parts) " 提取端口元素(处理bits字段中的Tab) let regwire = !empty(parts[1]) ? parts[1] : '' let bits = !empty(parts[2]) ? substitute(parts[2], '\t', ' ', 'g') : '' let name = parts[3] let comment = matchstr(line, '//.*$') " 保留原始注释 " 更新对齐参数 let s:max_reg = max([s:max_reg, len(regwire)+1]) let s:max_bits = max([s:max_bits, len(bits)]) let s:max_name = max([s:max_name, len(name)]) " 存储端口信息 call add(s:port_list, { \ 'type': 'port', \ 'regwire': regwire, \ 'bits': bits, \ 'name': name, \ 'comment': comment}) endif endfor " 第三阶段:生成对齐内容 let formatted = [] let cnt = 0 let s:last_blank = 0 " 空白行状态标记 for item in s:port_list if item.type == 'comment' call add(formatted, item.content) let s:last_blank = 0 " 空白行压缩逻辑 elseif item.type == 'blank' if !s:last_blank call add(formatted, '') let s:last_blank = 1 endif else let port = item let prefix = (cnt == 0) ? ' ' : ' ,' " 各字段对齐处理(强制使用空格) let reg_str = printf('%-'.s:max_reg.'s', port.regwire) let bit_str = printf('%-'.s:max_bits.'s', port.bits) let name_str = printf('%-'.s:max_name.'s', port.name) " 计算前缀总长度并补足30字符 let prefix_part = prefix . reg_str . bit_str . ' ' let prefix_length = strlen(prefix_part) let padding = repeat(' ', max([30 - prefix_length, 0])) " 组合完整行并清理Tab let line = prefix_part . padding . name_str if !empty(port.comment) let line .= repeat(' ', 2) . port.comment " 注释固定2空格间隔 endif let line = substitute(line, '\t', ' ', 'g') " 全局替换Tab为空格 call add(formatted, substitute(line, '\s\+$', '', '')) let cnt += 1 let s:last_blank = 0 endif endfor " 第四阶段:替换原始内容 execute a:firstline.','.a:lastline.'d' call append(a:firstline-1, formatted) endfunction command! -range AlignSignals <line1>,<line2>call AlignVerilogSignals() 检查以上脚本,并输出
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值