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