字符数组
来源:互联网 发布:电视直播软件v7.3.4 编辑:程序博客网 时间:2024/06/06 11:00
将 I am from ShangHai 转换为 ShangHai from am I
这道题的思路是先将这句I am from ShangHai 转换为iaHgnaS morf ma I
再将每个单词依次倒转
这题比较长,应该分次写
#include <stdio.h>
#include <string.h>void re(char str[], int len);
int main()
{
char str[] = "I am from ShangHai";
int len = strlen(str); //算出字符数组长度
re(str, len); //调用re函数
printf("first : |%s|\n", str); //第一次输出
return 0;
}
void re(char str[], int len)
{
int i;
char temp;
for (i = 0; i < len / 2; i++) /*这里前后倒换len/2次,(若有三个元素,a[0]与a[2]交换,a[1]不变,交换1次,若有4个元素,a[0],a[3]交换,a[1],a[2]交换,交换两次)*/
{
temp = str[i]; //前后交换
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
输出|iaHgnaS morf ma I|
第二次
#include <stdio.h>
#include <string.h>
void re(char str[], int len);
void re2(char str[]);
int main()
{
char str[] = "I am from ShangHai";
int len = strlen(str);
re(str, len);
printf("first : |%s|\n", str);
return 0;
}
void re(char str[], int len)
{
int i;
char temp;
for (i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
void re2(char str[])
{
int index = 0;
int len = 0;
int start = 0;
for (index = 0; index <= strlen(str); index++) /*这里需要将字符串中的'\0'也输入,所以index也需要等于字符串长度*/
{
if (str[index] != ' ' && str[index] != '\0') /*当字符数组没有查到‘ ’和‘\0’时,即为没有查出一个单词的长度,长度len自加1*/
{
len++;
}
else
{
printf("start : %4d len : %4d\n", start, len); //输出单词的起始位数和单词长度
start = start + len + 1; //单词起始的位数是上一个起始位数加上上个单词长度再加一
len = 0; //单词长度归零
}
}
}
输出
start :0 len :8
start :9 len :4
start :14 len :2
start :17 len :1
第三次
#include <stdio.h>
#include <string.h>
void re(char str[], int len);
void re2(char str[]);
int main()
{
char str[] = "I am from ShangHai";
int len = strlen(str);
re(str, len);
printf("first : |%s|\n", str);
re2(str); // 调用re2函数
printf("second : |%s|\n", str); 输出第三次处理后的字符数组
return 0;
}
void re(char str[], int len)
{
int i;
char temp;
for (i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
void re2(char str[])
{
int index = 0;
int len = 0;
int start = 0;
for (index = 0; index <= strlen(str); index++)
{
if (str[index] != ' ' && str[index] != '\0')
{
len++;
}
else
{
printf("start : %4d len : %4d\n", start, len);
re(str + start, len); //调用re函数,起始位数加上第一次处理后的字符数组名就是各个单词的首地址
start = start + len + 1;
len = 0;
}
}
}
输出
|ShangHai from am I|
此题要注意边界值
- 字符数组
- 字符。数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- 字符数组
- c语言笔记1
- 【集体智慧编程】第三章 发现群组
- 10分钟理解代理——静态代理
- c语言笔记2
- mpeg2音频编码每帧大小的计算
- 字符数组
- 非UI线程的线程池的封装
- Android runtime机制(一)init进程
- C++类静态成员与类静态成员函数详解
- CODEVS 1025 选菜
- JavaScript中的面向对象(二)
- 替换空格
- 操作系统的 (program)loader(程序加载器)
- 10分钟理解代理——JDK动态代理