【手把手带你刷好题】—— 41.说反话(C初阶测试、字符串)
【摘要】
【前言】
今天是刷题打卡第41天!
再接再厉鸭亲们。
原题:倒置字符串
题目描述:
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
方法一: 低级解法
思路:
使用gets函数读入一整行,(想想...
【前言】
今天是刷题打卡第41天!
再接再厉鸭亲们。
原题:倒置字符串
题目描述:
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
方法一: 低级解法
思路:
使用gets函数读入一整行,(想想为什么不用scanf()?),从左至右枚举每一个字符,以空格为分隔符对单词进行划分,并按照顺序存放到二维字符数组中,最后按单词输入顺序的逆序来输出所有单词。
代码执行:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[100] = { 0 };
gets(arr);
int len = strlen(arr);
int row = 0;
int col = 0;
int i = 0;
char str[100][100] = { 0 };
for (i = 0; i < len; i++)
{
if (arr[i] != ' ')//如果读到的字符不是空格,放到str数组中,并且令col++
{
str[row][col] = arr[i];
col++;
}
else//如果读到的字符是空格,在str数组中放置\0,并且令row++,置col为0
{
str[row][col] = '\0';
row++;
col = 0;
}
}
for (i = row; i >= 0; i--)//逆序打印,注意哦,最后一个单词后面不要打印空格
{
printf("%s", str[i]);
if (i > 0)
printf(" ");
}
return 0;
}
方法二:高级解法
代码执行:
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* start, char* end)
{
assert(start && end);
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main()
{
char arr[100] = { 0 };
gets(arr);
int len = strlen(arr);
//1、先逆置每个单词
//2、再逆置整个字符串
char* start = arr;
char* end = start;
while (*end != '\0')
{
if(*end != ' ' && *end != '\0')//注意,最后一个单词后面跟着是\0,比较特殊别忘记多加考虑
{
end++;
}
reverse(start, end - 1);
if (*end == ' ')//这个判断语句要要注意理解一下,当end访问到\0时start就不要往后面走了
{
start = end + 1;
}
else
{
start = end;
}
end = start;
}
//逆置整个字符串
reverse(arr, arr + len - 1);
puts(arr);
return 0;
}
结语
今天是刷题打卡第41天!
加油吧少年。
文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。
原文链接:bit-runout.blog.csdn.net/article/details/121610033
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)