C语言将字符串逆序输出问题(用函数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言将字符串逆序输出问题(用函数)相关的知识,希望对你有一定的参考价值。

写一个函数,使输出的字符串逆序存放,然后这是我的程序:
#include<stdio.h>
#include<string.h>
int main()

char str[100];
char opstr[100];
int length=0;
void op(char str[100],char opstr[100],int length);
length=strlen(str);
printf("nput string:\n");
scanf("%s",str);
op(str,opstr,length);
printf("inverse string:%s\n",opstr);

return 0;

void op(char str[100],char opstr[100],int length)

int i=0;
for(i=0;i<length;i++)

opstr[i]=str[length-i];



运行结果

求高手帮忙,额,我字符串这块没学好,麻烦了

采用函数进行字符串逆序输出,过程为:

    定义函数,参数为字符串指针

    定义局部变量指针t指向原字符串

    移动t指针到字符串尾

    向移动t指针,直到回到原指针头,输出各位置字符。

参考代码:

参考技术A

没有看明白你的代码,如果只是想把字符逆转后再输出.这应是很简单的,下面我写了一个逆转字符后并输出的代码:

#include <stdio.h>
#include <string.h>
#define  STRING_MAX_LONG 100
/*  Function prototypes */
void swaping(char*,char*),InverseString(char*,int);

void main()

   char str[STRING_MAX_LONG];
   int strLen=0;
   printf("Please input string:");
   scanf("%s",str);

   InverseString(str,strlen(str));
   printf("\\nInverse string after:%s\\n",str);


void swaping(char *a,char *b)

char temp=*a;
*a=*b;
*b=temp;

void InverseString(char s[],int len)

int i,k=-1,j;
i=j=0;

for (i=k+1;i<len;i++)
       j=len-i+k;
   if(i>=j) break;
   swaping(&s[i],&s[j]);

参考技术B 好像你的输出有问题,如果没记错,字符的输出c语言里面只能用for循环一个一个字符输出吧。c++可以直接写字符数组名输出 参考技术C 你先确定了长度

length=strlen(str);

再读入 scanf("%s",str);

很明显者两者对不上追问

修改之后还是有问题

追答

下面在你代码上修改好了,有几个小问题:

#include<stdio.h>
#include<string.h>
int main()

char str[100];
char opstr[100];
int length=0;
void op(char str[100],char opstr[100],int length);

printf("input string:\\n");
scanf("%s",str);
length=strlen(str);//赋值移动到这里 
op(str,opstr,length);
printf("inverse string:%s\\n",opstr);


return 0;

void op(char str[100],char opstr[100],int length)

int i=0;
for(i=0;i<length;i++)

opstr[i]=str[length-1-i];//需要再多减1 

opstr[i]='\\0';//需要增加字符串结尾字符 

用C语言写 字符串逆序输出

逆序输出有很多种,具体的实现方法取决于你题目的要求
1. 如果只是要求逆序输出,那么可以采用类似的方法:
void reverse(char *s)

if(*s=='\0')
return;
reverse(s+1);
printf("%c",*s);

这种方法在s很长的情况下会一直递归到底,不是很好。
2. 如果需要将字符串整个逆序在函数外面输出,那么可能希望采用返回字符串指针的方式;实现如下:
char * reverse( char* s )

static char *p = s+strlen(s)-1; //p是一个静态变量,指向当前递归层处理的字符串尾,而s指向字符串头
if(s < p)

  char c = *p; //交换头尾字符
  *p = *s;
 *s = c;
p--; //尾向前挪一个
reverse(s+1); //相当于头向后挪一个

return s;

3.1 当然,有的时候,并不需要reverse函数本身递归,而是可以借助一些辅助的递归函数,比如说:
void reversehelp(char * head, char * end)

if (head < end)

char c = *head;
*head = *end;
*end = c;
reversehelp(++head, --end);


然后在调用时像这样调用:
char * reverse(char * s)

char * end = s + strlen(s) - 1;
reversehelp(s, end);
return s;

3.2 类似的辅助函数还可以采用一个字符串指针和一个长度参数的方式,如下例:
void reversehelp( char* s, int n )

if ( n > 1 )

char c = s[n-1];
s[n-1] = s[0];
s[0] = c;
reversehelp( s+1, n-2 );


然后在调用时如下:
char *reverse(char *s)

reversehelp( s, strlen(s) );
return s;
参考技术A 这是利用递归调用实现用堆栈保存字符的,举例说明:
[scanf("%d\n",&a);]假设输入1
a不等于0,开始循环,[a--]a=0
[revers();]假设输入abc并回车,假设调用的函数叫revers1,内容与revers()一样
revers1():
[c=getchar()]c='a'
因为c!='\n'成立,执行[revers();]假设调用的函数叫revers2,注意revers1执行到此尚未结束
revers2():
[c=getchar()]c='1'
因为c!='\n'成立,执行[revers();]调用revers3,revers2执行到此等待执行revers3完后继续执行
revers3():
[c=getchar()]c='c'
因为c!='\n'成立,执行[revers();]调用revers4
revers4():
[c=getchar()]c='\n'
因为c!='\n'不成立,执行下句
因为不满足c!='\n'直接函数返回revers3
因为c='c'满足条件c
!=
'\n'&&c>='a'&&c<='z'执行[putchar(c);]输出c,然后返回revers2
因为c='1'不满足条件c
!=
'\n'&&c>='a'&&c<='z'直接返回revers1
因为c='a'满足条件c
!=
'\n'&&c>='a'&&c<='z'执行[putchar(c);]输出a,然后返回main
输出换行,执行[return
0;]
最后得到的输出为ca,这是将输入的字符串中小写字母进行逆序输出,其他字符则被滤除

以上是关于C语言将字符串逆序输出问题(用函数)的主要内容,如果未能解决你的问题,请参考以下文章

c语言:将递归的方法将一个正整数逆序输出

如何用C语言将字符串逆序输出?

C语言:输入一个字符串,然后逆序输出

C语言,写一个函数,使输入的字符串逆序

C语言怎么用函数把一个字符串逆序存放,比如说原字符串是abcd,怎么将他改为dcba?

C语言,编写一个函数:将给定字符串逆序