"I am from shanghai"的多种倒序输出方式,“shanghai from am I”
2018-01-30 16:25
441 查看
1.指针,遇到空格对单词进行倒序,最后对字符串倒序。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 5
int main()
{
char str[]= {"i am from shanghai"};
char *p1 = str;
char *p2 = str + strlen(str) - 1;
char tmp;
char *p3 = NULL;
while(p1 < p2)
{
tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
printf("%s\n",str);
p1 = str;
p2 = str;
while(*p2)
{
if(*p2 == ' ')
{
p3 = p2 -1;
while(p1 < p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
p1 = p2 + 1;
}
p2++;
}
printf("%s\n",str);
return 0;
}
2.用二维数组,很容易理解。
#include <stdio.h>
#include <string.h>
/*char * gets(char *a)
{
scanf("%s",a);
}*/
int main()
{
int i=0,j=0,k=0,length;
char a[150] = {0}/*="i am from shanghai , and you asd sdfg wer"*/, b[150][150];
printf("Please input a sentence:\n");
gets(a);
//scanf("%s", a);
printf("%s\n", a);
for(i = 0; i < strlen(a); i++)
{
if(' ' == a[i])
{
b[j][k]=' ';
b[j][k+1]='\0';
j++;
k = 0;
continue;
}
b[j][k] = a[i];
k++;
}
printf("%s ",b[j]);
for(i = j-1; i >= 0; i--)
printf("%s",b[i]);
printf("\n");
return 0;
}
3.用指针。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char c;
char *str= (char *)malloc (sizeof(char) * 20);
if (NULL == str)
{
printf("malloc failure\n");
}
char *t = str;
printf("please input:\n");
while((c = getchar()) != '\n')
{
*str++ = c;
}
str = t;
while(*str != '\0')
{
if (*str == ' ')
{
*str = '\0';
}
str++;
}
str--;
while(str != t)
{
if(*str == '\0')
{
printf("%s ",str+1);
}
str--;
}
printf("%s\n",t);
return 0;
}
4.用指针数组。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char *a[5]={0};
for(i = 0; i < 5; i++)
{
a[i] = (char*)malloc(sizeof(char) * 20);
if( NULL == a[i])
{
printf("failure\n");
exit(1);
}
scanf("%s",a[i]);
}
for(i = 4; i >= 0; i--)
{
printf("%s ",a[i]);
}
printf("\n");
return 0;
}
5.这是我自己学一维数组时写的,有点错误但是理论上是可以的。希望有人能加以修改。
#include <stdio.h>
#include <string.h>
int main()
{
int i,l,k,length;
char str[50]="I am from shanghai",ptr[50];
l = sizeof (str);
for(i = 0; i < l; i++)
{
length = sizeof (str);
if(' ' == str[i])
{
for(k = 0; k<= i; k++)
ptr[length - i + k-1] = str[k];
for(k = 0; k <= length - i; k++)
str[k] =str[k + i+1];
i = 0;
}
else if('\0' == str[i])
{
for(k = 0; k < i; k++)
ptr[k] = str[k];
ptr[i] = ' ';
break;
}
}
for(i =0; i < l; i++)
printf("%c",ptr[i]);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 5
int main()
{
char str[]= {"i am from shanghai"};
char *p1 = str;
char *p2 = str + strlen(str) - 1;
char tmp;
char *p3 = NULL;
while(p1 < p2)
{
tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
printf("%s\n",str);
p1 = str;
p2 = str;
while(*p2)
{
if(*p2 == ' ')
{
p3 = p2 -1;
while(p1 < p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
p1 = p2 + 1;
}
p2++;
}
printf("%s\n",str);
return 0;
}
2.用二维数组,很容易理解。
#include <stdio.h>
#include <string.h>
/*char * gets(char *a)
{
scanf("%s",a);
}*/
int main()
{
int i=0,j=0,k=0,length;
char a[150] = {0}/*="i am from shanghai , and you asd sdfg wer"*/, b[150][150];
printf("Please input a sentence:\n");
gets(a);
//scanf("%s", a);
printf("%s\n", a);
for(i = 0; i < strlen(a); i++)
{
if(' ' == a[i])
{
b[j][k]=' ';
b[j][k+1]='\0';
j++;
k = 0;
continue;
}
b[j][k] = a[i];
k++;
}
printf("%s ",b[j]);
for(i = j-1; i >= 0; i--)
printf("%s",b[i]);
printf("\n");
return 0;
}
3.用指针。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char c;
char *str= (char *)malloc (sizeof(char) * 20);
if (NULL == str)
{
printf("malloc failure\n");
}
char *t = str;
printf("please input:\n");
while((c = getchar()) != '\n')
{
*str++ = c;
}
str = t;
while(*str != '\0')
{
if (*str == ' ')
{
*str = '\0';
}
str++;
}
str--;
while(str != t)
{
if(*str == '\0')
{
printf("%s ",str+1);
}
str--;
}
printf("%s\n",t);
return 0;
}
4.用指针数组。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char *a[5]={0};
for(i = 0; i < 5; i++)
{
a[i] = (char*)malloc(sizeof(char) * 20);
if( NULL == a[i])
{
printf("failure\n");
exit(1);
}
scanf("%s",a[i]);
}
for(i = 4; i >= 0; i--)
{
printf("%s ",a[i]);
}
printf("\n");
return 0;
}
5.这是我自己学一维数组时写的,有点错误但是理论上是可以的。希望有人能加以修改。
#include <stdio.h>
#include <string.h>
int main()
{
int i,l,k,length;
char str[50]="I am from shanghai",ptr[50];
l = sizeof (str);
for(i = 0; i < l; i++)
{
length = sizeof (str);
if(' ' == str[i])
{
for(k = 0; k<= i; k++)
ptr[length - i + k-1] = str[k];
for(k = 0; k <= length - i; k++)
str[k] =str[k + i+1];
i = 0;
}
else if('\0' == str[i])
{
for(k = 0; k < i; k++)
ptr[k] = str[k];
ptr[i] = ' ';
break;
}
}
for(i =0; i < l; i++)
printf("%c",ptr[i]);
return 0;
}
相关文章推荐
- Liunx_C练习:把句子中的单词倒序;(输入"i am from shanghai",输出"shanghai from am i")
- 【嵌入式系统学习记录】练习:把句子中的单词倒序;(输入"i am from shanghai",输出"shanghai from am i")
- Windows驱动开发WDM (5)- DeviceIoControl(直接方式交互"输出buffer")
- i am from shanghai 将字符串倒过来输出的算法
- I am from ShangHai的倒序
- [LeetCode-Algorithms-26] "Remove Duplicates from Sorted Array" (2017.10.12-WEEK6)
- 无法直接启动带有"类库输出类型"的项目
- "NO 3D support is available from the host"
- 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。 现在请计算A+B的结果,并以正常形式输出。
- 4.编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
- CocosCreator知识库<三>关于CocosCreator中更换图片的三种方式_通用方式_"当前"尺寸_"原有"尺寸
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student"
- WinServer 之 发布WebService后调用出现" The test form is only available for requests from the local machine. "
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.
- 有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student"
- 用"时:分:秒"的方式显示运行时间
- 解决在Xcode编译出现"_iconv_open", referenced from: 的问题
- 怎样"服务"创建的快捷方式放到桌面
- asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0" 提供程序"