给定一个长度为 n 的字符串和一个指定行数 k ,请你从上到下,从左到右地把这个字符串转换成 z 字形,一共 n 行。
例如输入的字符串是 "nowcoder",k=3,则转换成的 z 字形是
n o
ocdr
w e
然后返回这个新字符串,noocdrwe
数据范围: ,字符串中仅包含小写英文字母。
char* zconvert(char* str, int k ) { int length = strlen(str)+1; if (k == 1||k>=length-1) return str; int a = 0; char* str1 = (char*)malloc(sizeof(char) * length); memset(str1, '\0', length); int cycle = 2 * k - 2; for (int i = 0; i < k; i++) { char* str2 = str + i; int c = 0; int flag = 0; while (c <=strlen(str)-1-i) { str1[a++] = *(str2+c); if (i == 0 || i == k - 1) c += cycle; else if (flag == 0) { c += cycle - i * 2; flag = 1; } else { c += i*2; flag = 0; } } } str1[a] = '\0'; return str1; }