① 用c语言编写的反转句子 如把: what is your name 换成 name your is what 求大神帮忙,看看哪里错
自己写的一个,用C标准库字符串函数实现的,指针用不好很容易出错。
主要思路:将整个句子以空格“ ”分割成多个字符串,保存在临时数组str_tmp[MAXLEN][20]中;将临时数组反序写入到str_reverse[MAXLEN]中,输出就可以了。
源程序:
#include <stdio.h>
#include <string.h>
#define MAXLEN 80
void main()
{
//char str[MAXLEN] = "what is your name";
char str[MAXLEN] = {0};
char str_tmp[MAXLEN][20] = {0};
char str_reverse[MAXLEN] = {0};
char *p,*delim = " ";
int i = 0,n;
printf("please input :"); //长度不要超过MAXLEN=80,可以修改宏;
scanf("%[^ ]",str); //允许输入空格,遇回车才结束输入;
p = strtok(str,delim);
while(p != NULL)
{
strcpy(str_tmp[i],p); //分割的字符串保存到临时数组;
p = strtok(NULL,delim);
i++;
}
for(n = i-1;n >= 0;n--)
{
strcat(str_reverse,str_tmp[n]); //将临时数组从后往前的字符串追加到反序数组中;
strcat(str_reverse," ");
}
printf("%s ",str_reverse);
}
运行结果截图:
② C语言每个句子的每一个单词 倒置
给出一个句子,把每一个字母倒置,但不改变单词的顺序。
输入:
这个题有多个CASE。第一行给出一个正整数N(N<500),然后紧接着一个空行,再紧接着N个数据块,。每一个数据块,包括一个正整数T与T行英语句子。句子总长不超过300。每两个数据块之间有一个空行。每个句子只包含大写字母与小写字母。
输出:
对于每个数据块 一行一句输出。每两个数据块之间用一个空行分隔。
输入样例:
1
3
I am happy today
To be or not to be
I want to win the practice contest
输出样例:
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc
③ 英文句子倒叙:(C语言实现)请按要求实现!
#include <stdio.h>
int nw(char *s)
{
int n=0,flag=0;
while (*s!='\0')
{
if(*s==' ')
flag=0;
else if(flag==0)
{
n++;
flag=1;
}
s++;
}
return n;
}
void iw(char *s)
{
char a[10][20];
int i,j,b;
b=nw(s);
for(i=0;i<b;i++)
{
j=0;
while(*s!='\0')
{
if(*s!=' ')
{
a[i][j]=*s;
j++;
s++;
}
else
{
s++;
a[i][j]='\0';
break;
}
}
}
a[i-1][j]='\0';
for(i=b-1;i>=0;i--)
printf("%s ",a[i]);
printf("\n");
}
void main()
{
char a[100];
printf("请输入一句话:\n");
gets(a);
iw(a);
}
④ c语言编写程序颠倒句子
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#defineOK1
#defineM5
//建单词节点
structNode{
char*data;
Node*next;
};
charf;
//插入函数
voidInsert(Node*&S,chare[])
{
Node*p;
p=(Node*)malloc(sizeof(Node));
p->data=(char*)malloc(strlen(e)+1);
p->next=NULL;
strcpy(p->data,e);
p->next=S;
S=p;
}
voidCreat(Node*&S)
{
inti=0,k=0,j,flag=1,insert;
chars[20];
chara[2000]={0};
printf(" 输入正文:");
fflush(stdin);
gets(a);
printf(" 原文为:");
while(a[i]!=NULL)
{
insert=0;
memset(s,0,20);
j=0;
//跳过单词前面的前导字符
while(flag&&!isalpha(a[i])||a[i]==39)//39为'的ASCII码
{
i++;
if(a[i]==NULL)
flag=0;
}
//当前单词尚未结束,则一直循环
while(flag&&isalpha(a[i])||a[i]==39)
{
insert=1;
s[j]=tolower(a[i]);
i++;
j++;
}
//单词插入
if(insert)
{
s[i]='