请教C语言字符串倒序输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教C语言字符串倒序输出相关的知识,希望对你有一定的参考价值。
//这个程序功能包括:1. 读入字符串 2. 倒序输出 3. 统计单词个数
#include<stdio.h>
#include<string.h>
void main()
char string1[200]; //用于存放输入的字符串
char string2[200]; //用于存放倒序后的字符串
int invertion(char *ch1, char *ch2); //声明函数
printf("Please input a sentences:\n");
scanf("%s", string1);
printf("Your inputed sentences is:%s", string1);
invertion(string1, string2);
printf("The invertion sentences is%s:\n", string2);
int invertion(char *ch1, char *ch2)/*char1 接收实参传过来的原字符串指针 char2 接收倒序后的新字符串返回主函数*/
int count = 0;
char *end = ch2;
char temp;
while(*ch1) // 统计单词个数
if(*ch1++ !=' ')
count++;
while(*ch1 != '/0' && *ch1 != ' ')
ch1++;
printf("count = %d", count);
while(*end)
end++;
end--;
for(; ch2 < end; ch2++, end--)
if(*end !=' ' && *end ='\0')
*ch2 = temp;
temp = *end;
*end = *ch2;
我是用指针来做的......定义一个函数invertion(char *ch1, char *ch2)实现单词倒排字符串,第一个形参ch1接收实参传过来的原字符串指针,倒排后的新字符串通过第二个形参返回主函数,函数还将统计字符串中一共有多少个单词......
程序有一个错误...但是不知道如何修正~
请教各位爱好者,我这个程序算法上有什么问题嘛?
倒序输出的能给我解释一下嘛...小弟是自学的....谢谢大家!
以单词为单位输出......
zzk88:谢谢你的帮助,但是我的意思是用单词为单位倒序输出...不是以字母为单位....
比如说: we are good men变成men good are we ...希望你能继续帮我..谢谢~!
能不能把运行错误(一共14个)修改了....还有告诉我你的算法思路...谢谢~!
#include<string.h>
void main()
char string1[200]; //用于存放输入的字符串
char string2[200]; //用于存放倒序后的字符串
int invertion(char *ch1, char *ch2); //声明函数
printf("Please input a sentences:\n");
gets(string1); //这里不要用scanf,因为scanf遇到空白符就会结束
printf("Your inputed sentences is:%s\n", string1);
invertion(string1, string2);
printf("The invertion sentences is:%s\n", string2);
getchar();
int invertion(char *ch1, char *ch2)/*char1 接收实参传过来的原字符串指针 char2 接收倒序后的新字符串返回主函数*/
int count = 1,num=0;
char *ch=ch1;
for(;*ch1!='\0';ch1++)// 统计单词个数
if(*ch1==' ')
count++; //单词数等于空格数加1,前面把count初始化为1就是这个原因
if(*ch1==' '&&*(ch1+1)==' ') //防止单词之间有2个空格符而多计数了一个单词数
count--;
printf("count = %d\n", count);
ch1=ch1-1;//前面的ch1经过循环之后已经指向字符串的结束标志'\0',这里减1是为了让它指向字符串的最后一个字符
while(ch1>=ch)//让ch1从指向string1的最后一个字符开始往前递减,当减到字符串的首个字符时结束
int j=num; //保存num,后面要用到这个数
if(*ch1!=' ')//记录每个单词的长度 ,以空格符作为标志
num++;
else // 知道了每个单词的长度之后,就可以用循环将字符以单词为单位写入数组string中,这样的话单词内就不会倒序了
for(int i=1;i<=j;i++,num--)
*(ch2-num)=*(ch1+i);
*ch2=*ch1;
ch1--;
ch2++;
for(int i=1;i<=num;i++,ch2++)//因为string1的第一个单词前没有空格符,肯定输不出来,所以单独用一个循环将其输出
*(ch2-num)=*(ch1+i);
*ch2='\0'; //string2的结束标志
这是我做了修改之后的程序,看看符不符合要求!!
你的那个定义的变量太多,很混乱!循环语句太乱了,if判断条件与循环条件不正确
已经做了修改,看符合要求不,不行的话,再说!!!
又做了修改了,看符合要求不??
不会吧,我调试通过还运行了!!不然怎么会发上来啊!!至于算法问题我给注释吧,你看看!! 参考技术A #include <stdio.h>
//提供求串长函数strlen()
#include <string.h>
//最后一个元素下标
int end;
void turn(char *h,int p)
//到末尾时开始输出
if (p == end) printf("%c",h[p]);
else
//没到末尾则先输出下一位
turn(h,p+1);
//然后输出当前位
printf("%c",h[p]);
void main()
char* p = "123456";
end = strlen(p)-1;
turn(p,0);
参考技术B 我也写一个吧:
void main()
char* pch;
printf("请输入要倒序的字符串:");
scanf("%s",pch);
int i=sizeof(*pch);
for(i,i<=0,i--)
put(pch+i);
get();
思路是这样的,具体代码也可能有一些错误,动态内存分配我都记不起了,所以也没有用 参考技术C 你的
函数
没有
返回值
。
把a,b两个
数组
设为
全局变量
就好了。
就这样就行了:
#include
"stdio.h"
char
a[20],b[20];
char
str(char
a[],char
b[])
int
m=19,n;
for(n=0;m>-1;n++)
if(a[m]!='\0')
b[n]=a[m];
else
b[n]='
';
m--;
void
main()
scanf("%s",a);
str(a,b);
printf("%s\n",b);
C语言怎么用函数把一个字符串逆序存放,比如说原字符串是abcd,怎么将他改为dcba?
我以前写了这个程序。略粗糙源代码:
#include <stdio.h>
#include <string.h>
#define ARR_SIZE 80 //字符串最大长度
int Inverse(char a[]);
void main(void)
char str[ARR_SIZE]=0;
printf("P199 6.12\n"); //题号
printf("---------------------Inversed sequence---------------------\n");
printf("\nPlease enter a charstring:\n\n");
gets(str); //输入一个字符串
Inverse(str); //调用函数逆序存放
int Inverse(char a[])
char b[ARR_SIZE]=0;
int i;
int maxsize;
maxsize=strlen(a)-1; //得到最后一个字符位置
for (i=0;i<strlen(a);i++) //依次交换存放
b[maxsize]=a[i];
maxsize--;
printf("\nThe changed result is:\n\n");
puts(b); //输出交换存放结果
printf("\n");
参考技术A //#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
void main(void)
char str[]="abcd";
printf("%s\n",str);
printf("%s\n",strrev(str));
本回答被提问者和网友采纳 参考技术B 栈 递归 输入缓存 都可以 参考技术C void reverse(char str[])
int len = strlen(str), i, temp;
for(i = 0; i < (len >> 1); i++)
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
参考技术D 貌似没有现成的函数,只能自己写一个了,很简单:
char *inverse(char * s)
int n = strlen(s);
char *p = s, *q = s+n-1, temp;
while (p <= q)
temp = *p;
*p = *q;
*q = temp;
++p;
--q;
return s;
以上是关于请教C语言字符串倒序输出的主要内容,如果未能解决你的问题,请参考以下文章