可恶的编程题21/6/6
作者:互联网
7-1 单词统计 (100 分)
给定的字符串中只包含#和小写字母,其中#是分隔符,连续的小写字母构成单词。单词内部不会包含#号,也不存在两个单词之间没有#的情况。请你写一个程序来统计一下一行字符串中单词的数量和#的数量。
输入格式:
第一行为一个整数n(0<n<10),代表共有n个字符串。后边n行,每行一个长度不超过100的字符串。
测试用例保证输入合法。
输出格式:
共n行,每行依次对应输入各个字符串。
每行的格式如下:
首先是一个整数,代表单词的数量,跟着是一个空格;然后又是一个整数,代表#的数量,跟着又是一个空格;最后依次输出所有单词,单词之间用一个空格分隔,最后一个单词后边没有空格。如果单词的数量为0,则在应该输出单词的位置输出三个连续的#。
输入样例:
2
#
hello#world
输出样例:
0 1 ###
2 1 hello world
思路 :
num二维数组第一个存单词数,第二个存井号数
word函数原理:碰到井号,判断前一个是不是井号,如果不是,就要在words(存单词)存一个空格,同时井号数+1,第一个和最后一个的情况要单独判断
碰到字母,前面一个如果是井号,单词数加一,存字母。不是,只存字母,开头是字母的情况要单独判断
坑的点:1.说是不会超过100,但是101就是不够,导致我之前一直错,把数组开大一些,就tm过了
2.单词输出末尾空格要去掉,不然格式错误,md
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//一个函数搞定
//设置全局变量
int num[11][3]={0};
char words[11][150]={0};
void word(char arr[],int n);
//void trim(char *strIn, char *strOut);//去空格函数
int rTrim(char *szBuf);
int main(){
char a[12][150]={0};
int n=0;
scanf("%d",&n);
int i=0;
for(i=0;i<n;i++){
scanf("%s",a[i]);
}
for(i=0;i<n;i++){
//调用函数判断
char *p=a[i];
word(p,i);
}
int j=0;
for(i=0;i<n;i++){
//char strout[100]={0};
printf("%d %d ",num[i][0],num[i][1]);
//trim(words[i],strout);
rTrim(words[i]);
if(i==n-1)
printf("%s",words[i]);
else
printf("%s\n",words[i]);
}
}
void word(char arr[],int n){
int len=strlen(arr);
char *s=arr;
int i=0;
int j=0;
for(i=0;i<len;i++){
//如果是井号
if(s[i]=='#'){
if(i==0){
num[n][1]++;
}
else if(i==len-1){
num[n][1]++;
}
else if(s[i-1]!='#' && i!=0){
num[n][1]++;
words[n][j]=' ';
j++;
}
else if(s[i-1]=='#' && i!=0){
num[n][1]++;
}
}
else if(s[i]!='#'){//字母
if(i==0){//头
num[n][0]++;
words[n][j]=s[i];
j++;
}
else if(s[i-1]=='#' && i>=1){//前边是井号
num[n][0]++;
words[n][j]=s[i];
j++;
}
else if(s[i-1]!='#' && i>=1){
words[n][j]=s[i];
j++;
}
}
}
if(num[n][0]==0){//0个单词
words[n][0]='#';
words[n][1]='#';
words[n][2]='#';
words[n][3]='\0';
}
/*if(num[n][1]==0){
num[n][0]=0;
words[n][0]='#';
words[n][1]='#';
words[n][2]='#';
words[n][3]='\0';
}
*/
}
int rTrim(char *szBuf)//去末尾空格
{
int i;
i = strlen(szBuf)-1;
while(szBuf[i] == ' '&&i >0)
i--;
szBuf[i+1] = '\0';
return 0;
}
标签:char,21,int,编程,单词,num,words,可恶,空格 来源: https://blog.csdn.net/keepgoingYi/article/details/117620123