错误日记
1.char * a 与char a[]的区别
字符指针指向字符常量,不可改变
2.char * a, b;
定义了一个字符指针a 和一个字符b,
并非定义两个字符指针。
问题:把 I am from shanghai 输出 shanghai from am I
法1:整段字母反向,再分辩单词,再将单词反向
/*************************************************************************
> File Name: reseq.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: 2017骞?5鏈?4鏃?鏄熸湡鏃?02鏃?1鍒?0绉? ************************************************************************/
#include<stdio.h>
#include<string.h>
void reseq(char * a, int len);
void reseq2(char * a, int len);
int main()
{
char p[] = "I am from shanghai";
printf("%s\n", p);
reseq(p, strlen(p));
printf("%s\n", p);
reseq2(p, strlen(p));
printf("%s\n", p);
return 0;
}
void reseq(char * a, int len)
{
int i;
char t;
for(i = 0; i < len / 2; i++)
{
t = a[i];
a[i] = a[len - 1 - i];
a[len - 1 - i] = t;
}
}
void reseq2(char *a, int len)
{
int start = 0;
int index = 0;
int i;
for(i = 0; i <= len; i++)
{
if(a[i] == ' ' || a[i] == '\0')
{
reseq(&a[start], index);
printf("%d %d\n", start, index);
start = start + index + 1;
index = 0;
}
else
{
index++;
}
}
}
运行结果,体现了3步过程
法2
分辩单词,将单词顺序反向
/*************************************************************************
> File Name: reseq2.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: 2017骞?5鏈?4鏃?鏄熸湡鏃?02鏃?6鍒?4绉? ************************************************************************/
#include<stdio.h>
#include<string.h>
void divide(char *a, int len);
int main()
{
char a[100];
printf("Please input a phase and end with /enter \n");
scanf("%[^\n]", a);
divide(a, strlen(a));
return 0;
}
void divide(char *a, int len)
{
char div[100][100] ;
int i = 0, j = 0, index;
for(index = 0; index <= len; index++)
{
if(a[index] == ' '|| a[index] == '\0')
{
i++;
j = 0;
}
else
{
div[i][j] = a[index];
j++;
}
}
i--;
while(i >= 0)
{
printf("%s ", div[i]);
i--;
}
printf("\n");
}
运行结果
进行改进 可对任意字符串进行反向