按所需顺序打印阵列

时间:2013-05-22 06:33:02

标签: c arrays string

我是一名新程序员

我有一个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");
    }
}

2 个答案:

答案 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.
     }          
}

输出

enter image description here

该算法的时间复杂度为 O(n ^ 2)