C语言问题:字符串(单词)反转,例如:I am boy,反转为 I ma yob 简单实用,指针操作

作者&投稿:家彼 (若有异议请与网页底部的电邮联系)
c语言的问题字符串反转~

因为你在dest++时,改变了dest的指向的位置,所以没有输出正确的结果。

按照你的程序给你修改了一下,请参考。
1 #include
2 #include
#include // 注意这里:增加使用malloc的头文件,消除warning
3 main()
4 {
5 char *a = "abc";
6 char *rever(char *dest,const char *src);
7 char *b = (void *)malloc(strlen(a)+1);
memset(b, 0x00, sizeof(strlen(a)+1)); // 注意这里:对malloc的buf进行初始化
8 printf("%s
", rever(b,a));
9 }

10 char *rever(char *dest,const char *src)
11 {
12 int n;
char *temp = dest; // 注意这里:用来记录dest的初始地址
13 for (n = strlen(src)-1;n>=0;dest++,n--)
14 *dest = *(src+n);
15 return temp; // 注意这里:返回dest字符串的首地址
16 }

程序给你测试通过。

从一端开始,一直到字符串中间位置,每个字符,与结尾处对称位置字符对调值即可。
函数如下:
char *reverse(char *s){ int l, i; char t; l = strlen(s); for(i = 0; i <= l/2; i ++) { t = s[i]; s[i] = s[l-i-1]; s[l-i-1] = t; } return s;}

#include <stdio.h>
int isSlipChar(char c) //非单词字符返回1
{
static char slipchar[]=" \t\n,;.<>\\/?:'\"|~`!@#$%^&*()-+{}[]";//自定义所有的可出现又不做单词的字符
char *p=slipchar;
while(*p)if(*p++==c)return 1;
return 0;
}
char* strReverse(char*s)//反转单词
{
if(!s||!*s) return s;
char *p1,*p2,*p3;
p3=s;
while(*p3){ //Agan://昨天的写法,接受网友的建议,改为模块化代码
while(isSlipChar(*p3)) p3++;//跳过不是单词的内容
p1=p2=p3;
while(*p2&&!isSlipChar(*p2)) p2++;
p3 = p2--;
while(p1<p2) {char c=*p1;*p1=*p2;*p2=c;p1++;p2--;}
} //if(*p3) goto Agan;//goto循环改为while循环了
return s;
}
//测试用例:
void main()
{
char buf[250];
printf("输入一个串:\n");gets(buf);
printf("反转后:\n%s",strReverse(buf));
}
//测试结果:
D:\Hwm\VC7\test1\Debug>test1.exe
输入一个串:
I am boy, you are a girl;
反转后:
I ma yob, uoy era a lrig;
D:\Hwm\VC7\test1\Debug>

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void search(char *);
void main()
{
char a[30],*p,*k; //p为指向单词首字母的指针
int n; //字符串长度
p=a;
printf("输入字符串:\n");
gets(p);
n=strlen(a);
k=a+n; //k为指向字符串尾字母的指针
*k=' ';
*(k+1)='\0';
printf("原字符串为:\n");
printf("%s\n",a);
if(*p!='\0')
{
printf("转换后为:\n");
search(p);
}
system("pause");
}

void search(char *p)
{
char *g,*t;
for(g=p;;g++)
{
if(!(((*g<='z')&&(*g>='a'))||((*g<='Z')&&(*g>='A'))))
{
for(t=g-1;t>=p;t--)
printf("%c",*t);
printf("%c",*g);
p=g+1;
if(*p=='\0') break;
}
}
}

void fun(char *str){
char *p1,*p2,*t; //p1指向单词的起始地址p2指向结尾地址。
p1=str;//字符串的起始地址赋给p1,即第一个单词的起始地址
while(++str){//判断字符串到最后
if(*str==" "){//如果为空格则前一个地址指向的是单词的末尾
p2=str;
p2--;//指向单词的末尾
while(p1++<p2--){//将单词交换
t=p1;
p1=p2;
p2=t;
}
p1=str++;//由str得到下一个单词的起始地址,当while(++str)循环退出的时候就的得到了p2的末尾
}
p2=str--;//最后一个单词的后面,不为空格特殊考虑,
while(p1++<p2--){
t=p1;
p1=p2;
p2=t;
}
}

这是我在网吧写的,没有验证过,供参考。

做一个循环,一个指针指向单词首,一个指针指向空格或者字符,然后申请一个字符变量做交换就可以了


C语言字符串 问题
数组声明以后,a[10]就是第11个元素了,所以不能这样赋值

c语言字符串问题
首先字符串定义是 char *c;(用指针) 而不是char c; 这样是单个字符定义了。其次字符串赋值要加上双引号""。即c="0326";最后输出用s%,d%是整型输出了。

c语言字符串问题
include<stdio.h> include<string.h> int main(){ char s[80];int flag;gets(s);\/*<string.h>中声明的标准库函数strstr(s,d)返回给定要从头开始搜索的源串s中指向给定子串d的第一次出现位置的指针,如果不存在子串则返回NULL。*\/ flag=strstr(s,".sch")==NULL;\/*或者flag=!!strstr(s,...

C语言字符串问题
char c[4]={'f','u','c','k'}; sizeof(c) 是4, 因为声明就开4个单元。char c[4]={'f','u','c','k'};的时候输出 ,因为4个单元满是字母,没有字符串结束符,%s 输出发生错误,输出后面内存里的内容。改成c[5]了之后,自动有字符串结束符,输出就是fuck了 {}定义 给 一...

C语言的字符串问题
int main(){ char str[100] = {0}; int i = 0; printf("pleace enter string str\\n"); gets(str); while (str[i] != '\\0') { printf("%c", str[i]); i++; }}你用gets来接受字符串就可以了,scanf和scanf_s遇到空格就停止接受了,gets遇到回车才...

C语言字符串问题: 输入一个字符串,其中有空格,因此字符串被分为n个...
printf("请输入一个字符串:\\n");gets(str);n=Div(str,word);printf("共有%d个单词\\n",n+1);for(i=0;i<=n;i++)printf("%s ",word[i]);printf("\\n");m=ZiMu(word,n,ch);if(m==0){ printf("没有重复字母!即 no!\\n");} else { printf("全部单词中重复的字母如下:")...

C语言问题:整理字符串
基本思路:使用标准库中的strtok函数分离字符串中除空白符外的各个子字符串,再用strcpy和strcat进行连接。范例:(Dev-C++调试通过)include <string.h> include <stdio.h> include <stdlib.h> char source[] = "\\t A string\\tof ,,tokens\\nand some more tokens"; \/\/ 测试用字符串 char ...

C语言问题:求字符串"1\\\\2\\a3\\n"的长度。。需详细解释怎么计算。。_百度...
include<stdio.h> include<string.h> void main(){ int i;i=strlen("1\\\\2\\a3\\n");printf("%d\\n",i);} 输出结果是 6 字符分别为:“1”“\\\\”“2”“\\a”“3”“\\n”“\\0”其中带有“\\”的表示转义字符,也是一个字符。最后一个“\\0”,表示字符串结束,是字符串结束的标志。

C语言字符串问题
); printf("3删除指定字符\\n"); } printf("4退出\\n"); fflush(stdin); c = getchar(); switch(c){ case '1': printf("请输入字符串:"); fflush(stdin)

C语言字符串问题
你好 你的程序是有问题的:s[30]="thisisa";这句话是把字符串赋值给s[30]这个字符变量,是不对的 你可以用scanf语句完成字符串的赋值。scanf("%s",s);键盘输入“thisisa”

睢县18917274239: 一道c语言问题要求c语言编写一个程序,将一个字符串翻转,例abc
蔽司特丽: 比较简单的方法就是使用系统提供的strrev函数. 代码如下,请参考: #include int main() { char *s="abcdefghijklmn"; printf("%s\n",strrev(s)); getch(); return 0; }

睢县18917274239: 用C语言做单词逆转 -
蔽司特丽: #include <stdio.h> #include <stdlib.h> void reverse_words(char * words) { char * h, * t; /* head and tail pointer to a word */ if ( *words != '\n' ) { /* '\n' signals the end of the string */ for(h = words; *words != ' ' && *words != '\n'; words++) ; /* traverse the ...

睢县18917274239: c语言问题~~~怎么把一串字符反着输出? 如ab cd ef 输出为 ef cd -
蔽司特丽: #include <stdio.h> #include <string.h>int main(){char s[100];int i, n;gets(s);n=strlen(s);for(i=n-1; i>=0; i--)printf("%c", s[i]);printf("\n");return 0; }

睢县18917274239: 写一个程序 反转字符串,反转的单位为单词.如:“I am a student”反正后为“student a am I”.(请不要在程序中使用任何库函数)请用c或者c++语言实现,最好用链表或者栈 -
蔽司特丽: #include<stdio.h> #define count 20//调整可输入数的个数. void main() {char array[count];int temp;printf("输入20个字符,可以多输入(多出部分省略),不可以少输入");for(int a=0;a<count;a++){scanf("%c",&array[a]);}for(a=...

睢县18917274239: c语言如何实现字符串按位翻转 -
蔽司特丽: 如果所说的是字符串的反转操作是很方便的,只要使用一个辅助单元就可以实现: char s[200],i,j,c; gets(s); for(j=0;s[j];j++); for(i=0;i<j;i++,j--){c=s[i];s[i]=s[j];s[j]=c;} puts(s);

睢县18917274239: 快来看看啊!!!急求,,,,在线等!!c语言编程问题:输入一个字符串,将它反向输出. -
蔽司特丽: #include<stdio.h>#include<math.h> int main(void) { int i,len; char ichar[2]; char zchar[256]={0}; char fchar[256]={0}; printf("请输入字符串:"); i=0; while(1) { scanf("%c",&ichar); //ichar=getc(); if (ichar[0] == 10) break; zchar[i]=ichar[0]; i++; } ...

睢县18917274239: c语言的问题字符串反转 -
蔽司特丽: 因为你在dest++时,改变了dest的指向的位置,所以没有输出正确的结果.按照你的程序给你修改了一下,请参考. 1 #include <stdio.h> 2 #include <string.h> #include <malloc.h> // 注意这里:增加使用malloc的头文件,消除warning 3 main() 4 ...

睢县18917274239: C语言把字符串中的字符反过来 -
蔽司特丽: strrev(s) 返回值指向颠倒顺序后的字符串指针

睢县18917274239: c语言输入字符串逆反输出 -
蔽司特丽: #includevoid main() { char a[100]; int i; printf("请输入一串字符串:\n"); scanf("%s",a); for(i=0;a[i]!='\0';i++) ; printf("该字符串逆反输出为:\n"); for(;i>=0;i--) printf("%c",a[i]); printf("\n"); }

睢县18917274239: C语言:字符串求反 -
蔽司特丽: #include int cnt_rev(char *s) { int cnt=0; char *p=s,t; while(*p) { cnt++; p++; } for(p--;s { t=*s; *s=*p; *p=t; } return cnt; } int main(void) { char str[101]; int cnt; gets(str); cnt=cnt_rev(str); printf("%d\n%s\n",cnt,str); return 0; }

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