[英]I have a problem in C about reversing a string (reversing rows and letters
#include <stdio.h>
#include <string.h>
#define W 5
#define N 10
void print_(const char[W][N],int);
void reverse(char[W][N],int);
int main ( ) {
char words[W][N] ;
char test[N];
char endword[N]="end";
int i=0;
while (scanf("%9s", test), strcmp(test,endword)) {
strcpy(words[i++], test);
printf("%s\n", test);
if(i==W)break;
}
print_((const char(*)[N])words,i);
reverse(words,i);
print_((const char(*)[N])words,i);
return 0;
}
void print_(const char x[W][N],int j){
int i;
for(i=0;i<j;i++){
printf("%d %s\n",i+1,x[i]);
}
}
void reverse(char x[W][N],int max){
int i,j,len,p=max;
char temp[N],temporal[W][N];
for(i=0;i<max;i++){
strcpy(temp,x[i]);
len=strlen(x[i]);
for(j=0;j<len;j++){
x[i][j]=temp[len-1-j];
}
memcpy(temporal[max-1],x[i],N*sizeof(char));
}
print_((const char(*)[N])temporal,max);
}
它设法颠倒了每个单词的字母,但是当我尝试颠倒行时它不起作用我在这里尝试放置内存本身,但这似乎不起作用。 唯一为时间打印的是最后一个 x[max-1],它是为时间 [max-1] 打印的。
在 while 循环的条件下
while (scanf("%9s", test), strcmp(test,endword)) {
使用了带有逗号运算符的表达式,
看来你是我
while ( scanf("%9s", test) == 1 && strcmp(test,endword) != 0 ) {
function 反转原数组的每一行
strcpy(temp,x[i]);
len=strlen(x[i]);
for(j=0;j<len;j++){
x[i][j]=temp[len-1-j];
}
但它不会反转数组的行。
这个说法
memcpy(temporal[max-1],x[i],N*sizeof(char));
仅复制数组temporal
的第max - 1
行中原始数组的当前行。
例如 function 可以写成下面的方式
void reverse( char x[W][N], size_t max )
{
for ( size_t i = 0; i < max; i++ )
{
for ( size_t j = 0, n = strlen( x[i] ); j < n / 2; j++ )
{
char c = x[i][j];
x[i][j] = x[i][n-j-1];
x[i][n-j-1] = c;
}
}
for ( size_t i = 0; i < max / 2; i++ )
{
char temp[N];
strcpy( temp, x[i] );
strcpy( x[i], x[max-i-1] );
strcpy( x[max-i-1], temp );
}
}
这是一个演示程序
#include <string.h>
#include <stdio.h>
#define W 5
#define N 10
void reverse( char x[W][N], size_t max )
{
for (size_t i = 0; i < max; i++)
{
for (size_t j = 0, n = strlen( x[i] ); j < n / 2; j++)
{
char c = x[i][j];
x[i][j] = x[i][n - j - 1];
x[i][n - j - 1] = c;
}
}
for (size_t i = 0; i < max / 2; i++)
{
char temp[N];
strcpy( temp, x[i] );
strcpy( x[i], x[max - i - 1] );
strcpy( x[max - i - 1], temp );
}
}
int main( void )
{
char s[W][N] = { "Happy", "New", "Year" };
size_t max = 3;
for (size_t i = 0; i < max; i++)
{
printf( "%s ", s[i] );
}
putchar( '\n' );
reverse( s, max );
for (size_t i = 0; i < max; i++)
{
printf( "%s ", s[i] );
}
putchar( '\n' );
}
程序 output 是
Happy New Year
raeY weN yppaH
尽管将 function 拆分为两个函数会更好。 第一个反转字符串。 第二个反转二维字符数组的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.