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

作者&投稿:爨妮 (若有异议请与网页底部的电邮联系)
C语言题目写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串…~

可以使用string.h标准函数吗?
可以的话 这样做
#include #include 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_string(buffer);printf("%s
", buffer);return 0;}

#include
#include
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("
"); //输入一个回车换行符,使后续输出能另起一行
return 0;
}

#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
", s);//输出原字符串

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

printf("New string: %s
", 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函数使用方法的演示:



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

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

那个两次循环有问题,先每次循环完了都是将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';

}



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

...您这是用什么语言啊?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语言编程.写出一函数,求出有N个元素的整数数组的最大值及其下标...
楼主,我的程序如下。函数max读入一个n元素的数组a,返回其中最大元素的地址。这样,在调用max的函数中(这里是main),可以通过两种运算分别得到最大元素的值和它的下标(见main中注释)include int max(int a,int n){ int i;int p = a;for (i = 0;i < n;i++ )if (a[i]> p )p ...

写一个C语言函数?
以下是一个使用栈和队列的函数,用于提取字符串数组中的阿拉伯数字并将其倒序添加到原字符串的剩余部分末尾:使用示例:from collections import deque def extract_and_reverse_strings(strings):stack = []queue = deque()result = ""遍历字符串数组 for string in strings:for char in string:判断字...

C语言,写一个函数,void sort(float a[ ],int n)功能为对数组a中的n个...
include<stdio.h> float sort(float a[],int n){ float t;for(int i=0;i<n;i++)for(int j=0;j<n-1-i;j++)if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;} for(int i=0;i<n;i++)printf("%.f ",a[i]);} int main(){ float a[20]={12,0,63...

用C语言写出一函式,将两个字串连线,该怎么写
c语言,不呼叫string库函式,怎样将两个字串连线起来? void _strcat(char *dest,char *sorc) { while(*dest) dest++; 首先目标字串指标指到末尾 while(*dest++=*sorc ++); 赋值...直到sorc为空 } 写一个函式,将两个字串连线。(不能用strcat函式) #include<iostream> using...

C#编程:定义一个函数,计算两个整数相除并输出结果,然后在主函数中调用...
1、无参函数。printstar和print_message就是无参函数。在调用无参函数时,主调函数并不将数据传送给被调用函数,一般用来执行指定的一组操作。2、有参函数。在调用函数时,在主调函数和被调用函数之间有数据传递。也就是说,主调函数可以将数据传递给被调用函数使用,被调用函数中的数据也可以带回来供...

写一个函数修改数组中的数据,在主函数中调用它。(C语言)?
{ int i,t;for(i = 0; i < count; i++){ t = num[i];num[i] = t + 1;} } int main(){ int i, b[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };\/\/ 调用函数 change_array(b, 10);\/\/ 输出结果 for(i = 0; i < 10; ++i){ printf("%d ", b[i])...

如何用c语言定义一个函数
函教定义格式函数定义的一般格式为:返回类型 函数名 (类型参数1,类型参数2,…){ 函数体}也可以不含参数,不含参数时,参数表中可写关键字 void 或省略,为规范起见,教程中对没有参数的函数,参数表中统一写 void。例如:类型 函数名 (){ 函数体}等价于:类型 函数名 (void) \/\/建议的...

C语言。写一个函数,使给定的一个3X3的二维整型数组转置,即行列...
方法一、include<stdio.h> void main(){ void switchArray(int[3][3]);int array[][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;switchArray(array);return 0;} void switchArray(int array[][3]){ int newArray[3][3];int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j...

编写一个函数实现两个字符串的连接(不使用库函数strcat).这个用C语...
void fun (char s1[],char s2[]){ int i,j;for (i=0;s1[i] !=’\\0’; i++); \/*求出的i为pA字符的总长度,包括结束标记位*\/ for (j=0;s2[j] !=’\\0’; j++)s1[i++]=s2[j]; \/*将pB字符串连在pA字符串的后面*\/ s1[i]='\\0’; \/*在字符串最后加上结束标记符*...

C语言:写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序...
h>void main(){void revStr(char *);char 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];...

易县19488037535: C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符 -
谷饶明真: 问题很简单:你根本就没有翻转字符串!!!!第一,你在调用char yuan(char a)后,用什么来接受它的返回值?对吧,在主函数中根本没有任何char组来接受它.你似乎可以将 gets(a); 后的语句改写成 a = yuan( a ); 然后输出.告诉你这也样...

易县19488037535: C语言题目写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串… -
谷饶明真: 可以使用string.h标准函数吗?可以的话 这样做#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]; ...

易县19488037535: C编程;写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串 -
谷饶明真: 第二种方法: #include #include main() {int n=0,i,m; char a[200],temp; gets(a); n=strlen(a); m=(n-1)/2; for(i=0;i

易县19488037535: c语言编程问题(编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串.) -
谷饶明真: return只能返回一个值...不能返回数组,我跟你改改 #include<stdio.h> #include<string.h> void main() { int i;char a[100]; char f(char a[]); gets(a);f(a);puts(a);} char f(char a[]) { int n,i; char b[100];n=strlen(a); for(i=0;n>=0;i++,n--)b[i]=a[n]; for(i=0;i<=n;i++)a[i]=b[i]; }

易县19488037535: C语言编写一个函数,使输入的一个字符串复制到一个字符数组中,并在主函数中输入和输出字符串 -
谷饶明真: #include<stdio.h> #include<conio.h> char fun(char *a) { int i = 0, j = 0; char b[80]; while (a[i] != '\0' && a[i] == '*') { i++; } while (a[i] != '\0') { b[j] = a[i]; i++; j++; } i = 0; j = 0; while (b[j] != '\0') { a[i] = b[j]; i++; j++; } a[i] = '\0'; return a; } int main() { char a[80]; ...

易县19488037535: 编写一函数,使输入的一个字符串反序存放,并在主函数中输入、输出字符串.(C语言) -
谷饶明真: 这题目我前几天才作的#include using namespace std;int main(){ const int n=5;//这里是5个数,具体有...

易县19488037535: C语言设计一个函数,输入一字符串,逐个重复输出,例如输入abc,输出aa -
谷饶明真: #include <stdio.h> int main(void) { char temp = 0; printf("请输入字符串:"); while((temp = getchar()) != '\n') for(int i = 0; i < 2; ++i) printf("%c",temp); printf("\n"); return 0; }

易县19488037535: C语言编程题目:写一函数,将输入的一个五进制数,转化成相应的十进制数输出. -
谷饶明真: main() { char *p,s[6];int n; p=s; gets(p); n=0; while(*(p)!='\0') {n=n*5+*p-'0'; p++;} printf("%d",n); }

易县19488037535: c语言编程 写一个函数,输入一行字符,将此字符串中最长的单词输出.用最简单的方法 -
谷饶明真: #include "string.h" #include "ctype.h" main() { char str[50]; char str1[50][20]; char str2[20]; int i,j,t;gets(str);j=0,t=0; for(i=0;str[i];i++) /*提取字符串中的单词,但是输入时每个单词之间只允许*/ { /*有一个字符如空格,逗号只有句末才能用句号*/...

易县19488037535: 1.编写程序,C语言1.编写程序,计算下面公式并输出结果.要求:(1)编写一个函数计算n!(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算... -
谷饶明真:[答案] 第一 #include main() { int n,m,i,j; long int sumn,summ; scanf("%d%d",&n,&m); if(m>15 || n>15) printf("wrong!\n"); else { sumn=1; summ=1; for(i=1;i sumn=sumn*i; for(j=1;j summ=summ*j; printf("sumn=%ld\nsumm=%ld\n",sumn,summ); } } 第二...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网