我是一名新程序员
我有一个char数组M =“something”, 我想以这种方式打印
t
eth
methi
omethin
something
任何人都可以帮助我使用循环以这种方式打印逻辑。
到目前为止,我已经使用过此代码,但显示了分段错误,任何正文都可以帮助我解决出错的问题。
main() {
int i, j, k, m, n;
char a[] = "Something";
n = sizeof(a) - 1;
for (i = 0; i < (n/2) + 1; i++) {
for (j = 0; j <= n - i; j++)
printf(" ");
for (m = (n/2) - i; !(m >= (n/2)); m--)
printf("%c",a[m]);
for (k = (n/2);k <= (n/2) + i; k++)
printf("%c", a[k]);
printf("\n");
}
}
答案 0 :(得分:4)
线性解决方案(注意字符串必须是可修改的)
#include<stdio.h>
#include<string.h>
int main()
{
char array[] = "something";
char * str = array;
int size = strlen(str);
int i=size/2;
if(size%2==0)i--;
for(;i>=0;i--){
char c = str[size-i];
str[size-i]='\0';
printf("%s\n",str+i);
str[size-i]=c;
}
}
我记得当我学习c时我有这样的家庭作业:)
更新
正如Jonathan Leffler指出的那样,在不修改字符串本身的情况下,我们可以通过将字符串长度传递给printf函数进行打印。 (我不知道%.*s
说明符:))它表明我们甚至可以从基本的简单问题中学到:)谢谢乔纳森。这使代码更加优雅和紧凑。
#include<stdio.h>
#include<string.h>
void print_string(const char *string)
{
int size = strlen(string),i;
for (i = (size - 1) / 2; i >= 0; i--)
printf("%d:%d: %.*s\n", i, size-2*i, size-2*i, string+i);
}
int main()
{
char * a = "something";
print_string(a);
}
答案 1 :(得分:0)
我创建的C程序,希望这有帮助。
#include<stdio.h>
int main()
{
char *str,*p1,*p2;
int count=0;
str="something";
p1=str; //points to the first element of the string.
while(*(str+1)!='\0')
str++;
p2=str; //points to the last element of the string.
while(*p1!='\0')
{
if(p1==p2)
printf("%c\n",*p1);
if(p1>p2)
{
while(p2<=p1)
{
printf("%c",*p2);
p2++;
count++;
}
p2=p2-(count);
count=0;
printf("\n");
}
p1++; // move to right.
p2--; // move to left.
}
}
输出
该算法的时间复杂度为 O(n ^ 2)