首页 > 其他分享 >输入一句英语将其倒置标点不倒置

输入一句英语将其倒置标点不倒置

时间:2023-02-18 20:31:58浏览次数:43  
标签:char arr cur 标点 单词 数组 倒置 英语

题目例如 l love beijing.倒置后就是beijing. love l.这道题的关键就是如何让电脑判断出电脑现在被输入的这些字符构成了一个单词。这个我们可以运用遍历假设就有一个人输入了 l love beijing.那么我们讲这句话包括标点存入到一个字符数组中那么当遍历数组遇到空格我们就知道了在空格之前的那些字符组成了一个单词。然后我想到完成这个问题的思路就是现将整个数组倒置那么这个时候数组内就变成了gnijieb evol l然后找到一个单词再对单词倒置一次那么就完成了英语的倒置。

接下类请看代码

//题目将一句话的单词进行倒置标点不倒置
#include<stdio.h>
#include<assert.h>
int my_strlen(char* p)//这个函数的目的就是求出这个数组的长度
{
int count = 0;
while (*p != '\0')
{
p++;
count++;
}
return count;
}
void My_Change(char* p,char* p1)//这个函数的工作原理就是通过传递给这个函数首末地址然后将这两个地址之间的字符倒置
{
assert(p&&p1);//这里断言防止传入的两个指针是空指针。
char temp = 0;
while (p < p1)
{
temp = *p;
*p = *p1;
*p1 = temp;
p++; p1--;
}
}
int main()
{
char arr[101] = { 0 };
gets(arr);//完成对数组的输入
//接下来对数组整个倒置
int sz = my_strlen(arr);//求出这个数组的元素个数
My_Change(arr,arr+sz-1);//字符倒置函数我们选择输入的两个指针分别是指向数组初始和数组最后的两个指针
char* cur = arr;//因为数组名就是数组的首地址。
while (*cur)//这个循环就是当*cur不为\0时继续循环。
{
char* start = cur;//将头部指针传给*start即记住首位字母
while(*cur != ' '&&*cur!='\0')//这里只有一个空格的条件是不严谨的因为如果我们让cue一直前进到了\0呢?这时我们也要让cur停止相加因为此时也相当与一个单词了由此我们要加入并且的逻辑
{
cur++;//当这个循环停止的时候那么此时的*cur指向的就是空格
}//当循环结束的时候我们就可以认为这个cur-1地址指向的那个值就是单词的最后一个字母
//之后我们这个单词逆序
My_Change(start, cur - 1);//将单词的首字母和末尾字母传递给我们的这个函数
if (*cur == ' ')
cur++;//目的是开始找下一个单词这里的cur也不能随意加加如果我们随意的加加那么我们便会在*cur指向\0的时候将\0给跳过了那么这就会对我们的while循环造成影响。
}
printf("%s", arr);
return 0;
}

运行结果

输入一句英语将其倒置标点不倒置_#include


标签:char,arr,cur,标点,单词,数组,倒置,英语
From: https://blog.51cto.com/u_15838996/6065522

相关文章