使用 C 程序以交叉方式打印字符串



我正在尝试编写一个程序,用于以交叉方式转换给定的字符串(即从左到右和从右到左的对角线)。如果字符串长度是偶数,则返回一条消息,否则将其排列为十字形式。

代码为:

#include<stdio.h>
#include<string.h>
int main()
{   
    char str[50];
    char str2[50][50];
    int lenstr;
    int i,j;
    char temp;
    printf("Enter the string :n");
    scanf("%s",str);
    lenstr = strlen(str);
    if(lenstr %2 == 0)
    {
        printf("The string length must be an odd length");
    }
    else
    {
        j = 0;
        temp = 0;
        for(i = 0;i == lenstr;i++)
        {
              str2[i][j] = str[i];
              j = j + 1;
        }
        for(i = lenstr; i==0 ;i--)
        {
              j = lenstr;
              str2[i][j] =  str[temp];
              temp = temp + 1;
              j = j - 1;
        }
        for(i = 0;i<lenstr;i++)
        {
             for(j = 0;j<lenstr;j++)
             {
                 printf("%c",str2[i][j]);
             }
             printf("n");
          }
     }
     return 0;
}

程序的输出必须是例如:极客

g       g
  e   e
    e 
  k   k 
s       s

但是获得的输出由不同的形状组成(如心形,笑脸等)。解释背后的概念以纠正它,如果可以解释何时为同一程序使用指针。任何帮助表示赞赏。

在代码中,您需要更改for循环条件检查表达式,例如 i == lenstr 和更高版本的 i==0 。从本质上讲,他们并没有进入循环。

相反,您可以替换整个块

for(i = 0;i == lenstr;i++)
  {
      str2[i][j] = str[i];
      j = j + 1;
  }
  for(i = lenstr; i==0 ;i--)
  {
      j = lenstr;
      str2[i][j] =  str[temp];
      temp = temp + 1;
      j = j - 1;
  }

在您的代码中由

for(i = 0;i<lenstr;i++)
    for(j = 0;j<lenstr;j++)
      str2[i][j] = ' ';      //fill 2D array with space
  for(i = 0;i < lenstr;i++)
  {
      str2[i][i] = str[i];               //set the character
      str2[i][lenstr- i -1] = str[i];    //reverse position
  }

并获得所需的输出。

现场观看

您存储对角线字符串的逻辑似乎是错误的。在第一个循环中,您存储左右对角线,索引从 0 变为 length-1,列从 0 开始;将其递增 1。左右对角线相同,唯一的区别是列从长度 1 开始并以 0 结束。因此,您需要初始化 temp = lenstr -1;

temp = lenstr -1;
        for(i = 0;i <lenstr;i++)
      {
          str2[i][j] = str[i];
          j = j + 1;
      }
      for(i = 0;i <lenstr;i++)
      {
          str2[i][temp] =  str[i];
          temp = temp - 1;    
      }
我认为

问题是str2没有被初始化。前两个 for 循环应该是这样的

for(i = 0;i < lenstr;i++)

for(i = lenstr; i>=0 ;i--)
这是我

的五美分。该程序允许输入具有奇数或偶数个字母的单词。

享受!:)

#include <stdio.h>
#include <string.h>
#define N   25
int main(void)
{
    while ( 1 )
    {
        char s[N];
        printf( "Enter a string less than %zu characters (Enter-exit): ", N );
        if ( !fgets( s, N, stdin ) || s[0] == 'n' ) break;
        size_t n = strlen( s );
        if ( s[n-1] == 'n' ) s[--n] = '';
        printf( "n" );
        for ( size_t i = 1, j = n; i <= n; i++, j-- )
        {
            char c = s[i-1];
            if ( i < j ) printf( "%*c%*cn", i, c, j - i, c );
            else if ( j < i ) printf( "%*c%*cn", j, c, i - j, c );
            else printf( "%*cn", i, c );
        }
    }
    return 0;
}

如果输入

Stackoverflow
hello

然后程序输出将是

Enter a string less than 25 characters (Enter-exit): Stackoverflow
S           S
 t         t
  a       a
   c     c
    k   k
     o o
      v
     e e
    r   r
   f     f
  l       l
 o         o
w           w
Enter a string less than 25 characters (Enter-exit): hello
h   h
 e e
  l
 l l
o   o
Enter a string less than 25 characters (Enter-exit): 
import java.util.*;
public class CrossCharacter {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = in.next();
        int len = str.length();
        char[][] ch_matrix = new char[len][len];
        len--;
        for(int i=0;i<=len;i++)
            ch_matrix[i][i] = ch_matrix[i][len-i] = str.charAt(i);
        for(int i=0;i<=len;i++){
            for(int j=0;j<=len;j++)
                System.out.print(ch_matrix[i][j]);
            System.out.println();
        }
    }
}
# include<stdio.h>
void main() {
  char n[100],temp;
  int i = 0, j;
  scanf("%s", &n);
  m = strlen(n);
  for(i = 0; i <= m - 1;)
    temp[i];
  i++;
  for(j = 0; j < m - 1; j++)
  {
    if(i == j + 1 || j == m - 1 - i + 1)
      printf("%c",temp);
    else
      printf(" "):
  }
  printf("n");
  getch();
}

相关内容

  • 没有找到相关文章

最新更新