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

# include <stdio.h>
void main()
{
void change (char string1[999]);
char string1[999];
printf("请输入字符串:");
gets (string1);
change (string1);
puts (string1);
}
void change (char string1[999])
{
int i,n;
for (i=0;string1[i]!='\0';i++);
for (n=0;n<=i;n++)
string1[i+2+n]=string1[i-n];
for (n=0;n<=i;n++)
string1[n]=string1[i+2+n];
}
运行没有输出··求大神搭救

问题很简单:你根本就没有翻转字符串!!!!
第一,你在调用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;
}
}

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

void change (char string1[999])这个函数要重写)——

void change (char string1[]){
int i,n,t;//这里有改
for (i=0;string1[i]!='\0';i++);
for(i--,n=0;n<i;n++,i--){//这里及以下有改
t=string1[n];
string1[n]=string1[i];
string1[i]=t;
}
}

第2个回答  2017-09-24

索引算错了,不是 i-n 应该是 i-n-1

string1[i+2+n]=string1[i-n-1];

第3个回答  2012-12-09
# include <stdio.h>
#include <string.h>
void change (char * string1);
void main()
{
char string1[999];
printf("请输入字符串:");
gets (string1);
change (string1);
puts(string1);
}
void change (char * string1)
{
int i;
char t;
for(i = 0; i < strlen(string1)/2; i++)//第一个字符和最后一个字符 依次交换位置
{
t = string1[i];
string1[i] = string1[strlen(string1)-i-1];
string1[strlen(string1)-i-1] = t;
}
}
第4个回答  推荐于2017-09-24
#include<stdio.h>
#include<string.h>
void change (char*arr);
void main()
{
char string1[999];
printf("请输入字符串:");
gets (string1);
change (string1);
puts (string1);
}
void change (char*arr)
{
int n;
int temp;
int length;
length=strlen(arr);
for (n=0;n<length/2;n++)
{
temp=arr[n];
arr[n]=arr[length-n-1];
arr[length-n-1]=temp;
}
}
好多地方错了。你自己好好看看。本回答被提问者采纳

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

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
printit(str,strlen(str));\/\/ 调用函数 str 是你输入的字符串 strlen(str)是获取str字符串的长度printf("\\n");\/\/输出修改后的字符串return 0;}\/\/然后\/\/printit函数 作用是修改字符串void printit(char *str,int length){ int i; for(i=length-1;i>=0;i--) \/\/i=length-1 代表指向你的字符串...

C语言题目写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
include <stdio.h>#include <string.h>void Reverse_string(char *str){int len = strlen(str), i;char t;for(i = 0; i <= len \/ 2; i ++){t = str[i];str[i] = str[len - i - 1];str[len - i - 1] = t;}}int main(){char buffer[100];gets(buffer);Reverse_st...

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
strcat(string ,string ) ---把后1个剪切后放入前一个字符串,空间要够 strcmp(string ,string )---比较2个字符串,0为相同,>0前1个大,<0后1个大 strlen(string )---字符串长度

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 ...

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
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(...

C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
include <stdio.h>#include <stdlib.h>#define N 10void fanzhuan(char* a);int main() {int i;char a[N]={'\\0'};printf("请输入字符串:");scanf("%s",a);fanzhuan(a);return 0;}void fanzhuan(char* a){int i;for(i=strlen(a)-1;i>=0;i--){printf("%c",a[i]);}...

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

...个字符串按逆序存放。在主函数中输入和输出字符串。
include <stdio.h>#include <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] =...

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;}} ...

相似回答