1

我是新程序员

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

2 回答 2

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);
}
于 2013-05-22T15:30:34.940 回答
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)

于 2013-05-22T14:29:54.860 回答