统计字符串单词个数
【问题描述】统计字符串str中单词的个数。单词之间以空格,逗号,句号作分隔,数字也看做单词。单词之间可能不止一个分隔符。
【输入形式】从标准输入中输入一组字符串
【输出形式】输出单词个数
【样例输入】It's 10:10 o'clock ,I am late.
【样例输出】6
#include<stdio.h>
#include<string.h>
int main()
{
int i,le,flag=0,num=0;
char s[100];
gets(s);
le=strlen(s);
for(i=0;i<le;i++)
{
if(s[i]==' '||s[i]==','||s[i]=='.')
flag=0;
else
{
flag ++ ;
if(flag == 1)
num ++ ;
}
}
printf("%d", num);
}
分析
首先使用gets得到字符串s,遍历其每一个字符,如果为分隔符,那么设flag为0,否则flag++
所以我们可以分析得到,如果当前的flag=0,那么上一个字符为分隔符(此时不一定单词+1,因为可能出现多个空格并列)
如果flag=1,表示上一个字符为一个单词的第一个字母(就是说一个单词已经开始了,num++)
若flag=8,表示上一个字符为一个单词的第8个字母
字符交叉拼接
问题描述】
编写函数void fun(char *s1,char *s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。如输入abc<CR>12345<CR>,输出a1b2c345,若输入abcde<CR>123<CR>,则输出a1b2c3de。
#include<stdio.h>
#include<string.h>
void fun(char *s1,char *s2)
{
}
int main()
{
char a[100],b[100];
void fun(char *,char *);
printf("Input string 1:");
gets(a);
printf("Input string 2:");
gets(b);
fun(a,b);
puts(a);
return 0;
}
【输入形式】输入2个字符串
【输出形式】输出交叉连接后的字符串
【样例输入】
Input string 1:abcdefg
Input string 2:123
【样例输出】a1b2c3defg
#include<stdio.h>
#include<string.h>
void fun(char *s1,char *s2)
{
int i, j, lmin;
int l1 = strlen(s1);
int l2 = strlen(s2);
if(l1 < l2)
lmin = l1;
else
lmin = l2;
char s3[520];
for(i = 0; i < l1; i++) // 将s1复制到s3里,以后就用s3当s1
{
s3[i] = s1[i];
}
for(i = 0; i < 2*lmin; i++) // 处理前面交错的部分
{
if(i%2 == 0)
{
int p = i/2 ;
s1[i] = s3[p] ;
}
if(i%2 == 1)
{
int p = (i-1)/2;
s1[i] = s2[p] ;
}
}
if(l1 < l2) // 处理后面的尾巴
{
for(j = (i-1)/2+1; j < l2; j++)
{
s1[i++] = s2[j];
}
s1[i] = '\0'; // 不加此项结尾符,puts会将后续乱码输出
}
else if(l1 > l2)
{
for(j = i/2; j < l1; j++)
{
s1[i++] = s3[j];
}
s1[i] = '\0';
}
}
int main()
{
char a[100],b[100];
void fun(char *,char *);
printf("Input string 1:");
gets(a);
printf("Input string 2:");
gets(b);
fun(a,b);
puts(a);
return 0;
}
分析
这里采取简单粗暴的直接做法。
即先把两条字符串前n个,你一个我一个的交错起来,得到一个2n的混合串,然后将较长的那个直接加在后面作为尾巴