C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符

# include <stdio.h>
# define N 50
void reverse(char a[],int N)
{
int i,j,temp;
for(i=0,j=N-1;i<j;i++,j--)
{
a[j]=temp;
a[j]=a[i];
a[i]=temp;
}
}
void main ()
{
int k;
char b[N];
printf("请输入一串字符:\n");
for(k=0;k<N;k++) scanf("%s",&b);
printf("反序输出的结果是:\n");
puts(reverse(b));
}
这个程序哪错了?
还有系统不让我通过啊,反馈的错误是
ompiling...
ch07_05.cpp
C:\Documents and Settings\Administrator\桌面\ch07_05.cpp(3) : error C2143: syntax error : missing ')' before 'constant'
C:\Documents and Settings\Administrator\桌面\ch07_05.cpp(3) : error C2143: syntax error : missing ';' before 'constant'
C:\Documents and Settings\Administrator\桌面\ch07_05.cpp(3) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

#include <stdio.h>

#include <string.h>

void input(char st[]);//定义输入函数

void reverse(char st[]);//定义反序函数

int main()

{

char s[20];

input(s);//调用输入函数

printf("Original string: %s\n", s);//输出原字符串

reverse(s);//调用反序函数

printf("New string: %s\n", s);//输出反序后的字符串

return 0;

}

void input(char st[])

{

printf("Please enter string: ");

gets(st);

}

//反序函数

void reverse(char st[])

{

int n=strlen(st);

for (int i=0, j=n-1, t; i<(n/2); t=st[i], st[i]=st[j], st[j]=t, i++, j--);

}

扩展资料:

gets()用法:

1、gets() 函数是从键盘输入字符串,该函数只有一个参数。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。打开编辑器,新建一个c语言文件,引入标准库并新建主函数

2、gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间,这里的程序是用gets函数输入字符串,可以看到不像scanf那样需要使用%号,gets函数中直接传入字符串即可:

3、最后运行下程序,输入“i love you”,可以看到gets函数可以直接输出空格,而scanf函数输出空格则需要使用转义字符实现,因此gets函数的使用要比scanf简洁的多。以上就是gets函数使用方法的演示:

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-14
问题很简单:你根本就没有翻转字符串!!!!
第一,你在调用char yuan(char a)后,用什么来接受它的返回值?对吧,在主函数中根本没有任何char组来接受它。你似乎可以将 gets(a);
后的语句改写成 a = yuan( a ); 然后输出。告诉你这也样行不同的,只因为接下来的第二点。
第二,你的yuan函数设计有问题。你犯了一个初学者很容犯的错误试图从被调用函数中返回一个数组(或指针)的值。要知道,被调用的函数编译后存储在堆栈当中:它在被调用时创建,结束调用时销毁。所以说,不能用它来返回数组(或指针)的值。

至此,你的提问已经解决。下面给出我的想法,
现在思考你要解决的问题:将一个字符串(或者说是字符数组)翻转。这就要求你必须为yuan函数传递个字符串参数a;然后就是翻转,但是翻转的字符串不会超出原字符串的长度,故而可设计用它自身将翻转值带出。可将翻转函数原型设计为 void yuan(char *a); 实现如下:
void yuan(char *a){
char temp;
int i;
int count;
count = strlen( a ) - 1; /*这里用count表示可用的最大下标,如当数组元素为5是,可用的最大下标应为4。明白这一点很重要,也很有意思*/
for(i = 0; i < count / 2; i++){
temp = a[i];
a[i] = a[count - i];
a[count - i] = temp;
}
}

再到这里似乎没什么话可说了,不过还是要给出几点建议:
第一,合理使用空白,是你的程序更具可读性;
第二,为设计标识符可以适当学习一下英语;
综上,在学习初期养成良好的编程风格很重要。
谨祝,
学习进步!
第2个回答  2013-05-09

那个两次循环有问题,先每次循环完了都是将b 赋值成同一个值,到最后一次循环b会都复制成h

可以下面这个 合并下,不过感觉很啰嗦啊哈哈

void fun(char a[],char b[])

{  int n,i,j;

   n=strlen(a);

 for(j=n-1,i=0;j>=0,i<n;j--,i++)

    b[i]=a[j];

 b[i]='\0';

}

第3个回答  2016-08-30
#include<stdio.h>
#include<string.h>
void printit(char *str,int length) //返序输出函数
{

int i;
for(i=length-1;i>=0;i--) //从给定的字符串的最后一位依次向前遍历各字符
putchar(*(str+i)); //每向前一个字符即打印该字符,直至第一个字符为止。
}
int main()
{ char str[80]=""; //定义一个长度为80字节的字符串数组,并初始化
gets(str); //从键盘中输入一个字符串(遇回车键结束)
printit(str,strlen(str)); //调用上面定义的函数反序输出字符串
printf("\n"); //输入一个回车换行符,使后续输出能另起一行
return 0;
}
第4个回答  2012-04-26
...您这是用什么语言啊?C++的应该是这样的吧:(现写的,可能会有一点问题,但大体是这样的)
int main()
{
char str[40]; //假设40是存放的字符串最大值
char str2[40];
cin>>str; //连续输入字符串,以空格,回车结束
//字符串存储是以‘\0’结束
int i=0; //循环起点
while(str[i]!='\0') //判断是否是结束符,不是的情况下循环,是的情况下退出循环,i值就是字符串长度,也可以直接在括号中写sri[i]进行判断是否非空值
{
i++;
}
int length=i;
int j=0;
for(i=i-1;i=0;i--) //判断条件是i为0,循环条件是i--
{
str2[j]=str[i];
j++; //逆序拷贝
}
str2[j]='\0'; //结束符
cout<<str2; //输出,不过有些地方好像不支持直接输出,也可以用for循环逐个输出
}

以上==不过我也不是什么高手,程序要是有问题的话欢迎交流~大家一起进步~

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
include <string.h> void input(char st[]);\/\/定义输入函数 void reverse(char st[]);\/\/定义反序函数 int main(){ char s[20];input(s);\/\/调用输入函数 printf("Original string: %s\\n", s);\/\/输出原字符串 reverse(s);\/\/调用反序函数 printf("New string: %s\\n", s);\/\/输出...

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
c = str[i];str[i] = str[len -i -1];str[len -i -1] = c;} }

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
putchar(*(str+i)); \/\/每向前一个字符即打印该字符,直至第一个字符为止。}int main(){ char str[80]=""; \/\/定义一个长度为80字节的字符串数组,并初始化gets(str); \/\/从键盘中输入一个字符串(遇回车键结束)printit(str,strlen(str)); \/\/调用上面定义的函数反序输出字符串printf("\\n"); \/\/输入...

C语言 写一个函数使输入的一个字符串按反序存放
编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符。可以设置一个中间值,让两端的字符相交换,然后前头的向后移动一位,后头的向前移动一位。当前头的变量大于中间值时。程序停止执行。根据此原理编写代码如下:include<stdio.h> define N 100 void inverse(char[]);int main(...

C语言: 写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字...
第一,你在调用char yuan(char a)后,用什么来接受它的返回值?对吧,在主函数中根本没有任何char组来接受它。你似乎可以将 gets(a);后的语句改写成 a = yuan( a ); 然后输出。告诉你这也样行不同的,只因为接下来的第二点。第二,你的yuan函数设计有问题。你犯了一个初学者很容...

C语言 请帮忙改正以下程序的错误 :写一个函数,使输入的一个字符串按反...
\/\/ 函数功能:反转c型字符串 \/\/ 修改: Poseidon0922 include <stdio.h> include <string.h> void fanxu(char *dst, const char *src);int main(void){ char str0[100];char str1[100];gets(str0);fanxu(str1, str0);puts(str1);return 0;} void fanxu(char *dst, const char ...

...一个字符串按逆序存放。在主函数中输入和输出字符串。
<string.h>\/\/ 反序字符串x并返回char* reverse(char *x){ int len = strlen(x); int i, n = len \/ 2; char tem; for (i = 0; i <= n; i++) { tem = x[i]; x[i] = x[len - 1 - i]; x[len - 1 - i] = tem; } return x;...

C语言:写一函数,使输入的一个字符串按反序存放,在主函数中输入...
str[80];printf("输入一个字符串: ");gets(str);revStr(str);printf("转置后的字符串: %s\\n",str);}void revStr(char *str){int i,len;char tmp;for(len=0;str[len];len++);for(i=0;i<len\/2;i++){tmp=str[len-i-1];str[len-i-1]=str[i];str[i]=tmp;}} ...

...的字符串按反序存放,在主函数中输入和输出字符串。
文件1:include <stdio.h> define N 6 \/\/static char str[N]; 这个没必要 int f (char); \/\/声明flashback函数. \/\/ 声明放外面,好的习惯 int main(){ char str[N] = "abcde";printf("原字符串:\\n");puts (str);f (str[N]); \/\/调用flashback函数.printf("倒序后的字符串...

写一个函数 使输入的一个字符串按反序存放,在主函数中输入和输出字符串...
include<stdio.h>int main(){char word(char a[30]);char a[30];int i=0;gets(a);\/\/输入字符while(a[i]!='\\0'){printf("%c",a[i]);\/\/以数组形式输出字符i++;\/\/控制每一个数组元素}word(a);printf("\\n反转后的字符是:%s\\n",a);return 0;}char word(char a[30]){int...

相似回答