目录
例子:
思路方法:
编辑
(分板块)代码的实现:
一.字符串的获取(3种简单的方法)
1.用gets()函数,即使中间有空格也会读取
2.用fgets()函数
3.用scanf("%[^\n]s")读取也可以达到同样的效果
二.字符串倒置代码的实现:
字符串倒置的代码实现:
三.每个单词的倒置代码实现:
整个代码的实现:
知识点总结:
"I like beijing.",经过处理后变为:"beijing. like I"。
//字符串长度不超过100。(注意不是简单的将字符串全部倒置);
方法:
第一步:先将字符串全部倒置;
第二步:将每个单词进行倒置;
方法2:
也可以先进行单词倒置,在将整个字符串倒置;
图解:
注意:
这里我们不能通过循环用scanf函数来读取;因为scanf()函数遇到空格就停止读取;
例如
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
char arr[100];
int i = 0;
while (scanf("%s", &arr) != EOF)
{
;
}
return 0;
}
当输入 “ i like beijing." 时,arr的内容为:
解决方法:
#include
int main()
{
char arr[100];
printf("获取字符\n");
gets(arr);
printf("\narr字符串的内容为:%s\n",arr);
return 0;
}
运行结果:
gets(arr,100,stdin)
用法:fgets(读取的字符放大位置(如要放入arr里),限制最多读取多少(如限制最多读取100字符,在哪里读取(如从键盘上获取stdin));
stdin——>标准输入—键盘;
注意:fgets会把(\n)回车作为字符获取;如果\n影响代码实现,不想要\n,可以在读取后,计算字符串长度然后将最后一个字符换为\0;
#include
int main()
{
char arr[100];
printf("获取字符\n");
fgets(arr,100,stdin);
printf("\narr字符串的内容为:%s\n", arr);
return 0;
}
删去\n:
#include
int main()
{
char arr[100];
printf("获取字符\n");
fgets(arr,100,stdin);
//计算字符串长度(不用sizeof的原因在在其他博客作品
//”strlen和sizeof的区别及用法中“有写过)
int len = strlen(arr);
//将最后一个字符\n用\0取代,从而删去\n
arr[len - 1] = '\0';
printf("\narr字符串的内容为:%s\n", arr);
return 0;
}
效果:
加了[^\n]——>意思是一直读取,直到遇到 \n (回车),即使中间有空格
#include
int main()
{
char arr[100];
printf("获取字符\n");
while (scanf("%[^\n]s", &arr) != EOF)
{
;
}
printf("\narr字符串的内容为:%s\n", arr);
return 0;
}
运行结果:(不会像最前面那样遇到空格就停止读取)
因为后面单词的倒置和字符串的倒置相同,所以这里分装一个函数 ReversrArr( ) 来实现倒置;
这里参数只需将字符串的初末元素地址传入,用指针char* left 和char* right接收
数组名即首元素地址,容易得到;
末元素地址可以用strlen(arr)函数得到长度,再用(arr+长度-1)得到;
//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
while (left < right)
{
char tmp = *left;//中间变量
*left = *right;
*right = tmp;
left++;
right--;
}
}
#include
#include
int main()
{
char arr[100];
printf("获取字符\n");
gets(arr);
//计算字符串的长度
int len = strlen(arr);
//倒置字符串
ReverseArr(arr,arr+len-1);
printf("%s\n",arr);
return 0;
}
运行结果:
我们要用前面的 ReverseArr()需要知道每个单词的起始(left)和(right)
由于每个单词用 空格 隔开的,所以我们可以用 空格 来作为遍历条件
代码实现:
//每个单词的倒置
char* start = arr;
char* end = arr;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
ReverseArr(start, end-1);
start = end + 1;
if (*end == ' ')
{
end++;
}
}
//字符串倒置代码实现
void ReverseArr(char* left, char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
#include
#include
int main()
{
char arr[100];
printf("获取字符\n");
gets(arr);
/*printf("%s\n",arr);*/
//计算字符串的长度
int len = strlen(arr);
ReverseArr(arr,arr+len-1);
/*printf("%s\n",arr);*/
//每个单词的倒置
char* start = arr;
char* end = arr;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
ReverseArr(start, end-1);
start = end + 1;
if (*end == ' ')
{
end++;
}
}
printf("%s\n",arr);
return 0;
}
运行结果:
1.该算法思想
2.字符串输入(获取)的3种方法
1. scanf("%[^\n]s",&arr) 注意:scanf("%s",&arr)遇到空格会停止读取
加了[^\n]——>意思是一直读取,直到遇到 \n (回车),即使中间有空格
2.gets(arr) 可以读取空格
3.fgets(arr,100,stdin)
arr --->读取的文本放在哪里(arr)
100--->读取的最大限制
stdin--->标准输入----键盘
注意:fgets会把(\n)回车作为字符获取;如果\n影响代码实现,不想要\n,可以在读取 后,计算字符串长度然后将最后一个字符换为\0;删除方法示例在前面fgets处
3.倒置字符串和单词的方法