有关这个题如何输入和存储字符串
Description
题目描述
犹豫良久之后,bob痛下决心要考研。作为一个合格的考研er,bob很早就来到了一教, 拿出精心准备的考研必备神器--考研英语单词表!在看到单词表那一串串长长的英语词组时, 他顿时感到无力。请你帮忙统计一下,每一串英语词组中有多少个不重复的单词出现,然后把数目告诉bob, 让他不要灰心。
输入
数据的第一行为一个整数k,1 ≤ k ≤ 1000,表示测试用例的个数。以后每行是一串字符(长度不超过1100), 字符只有小写字母和空格组成,不会出现纯空格,单词之间可能存在多个空格。
输出
输出每一串不重复的单词个数,每个用例输出一行。
样例输入
2
life is but once so cherish your life
no pains no gains
样例输出
7
3
主要是怎么输入和保存字符串 #include <stdio.h>
#include <string.h>
void Remove_the_newline_character (char str[]);
void strToWord (char str[], // 字符串地址
int n, //指str中字符串的个数
char wordBuff[] // 单词(字符串)地址
);
int compare (char str[]); //比较 一个字符串中不重复的单词个数并返回
int main()
{
char str_tmp; //用于临时存放字符串
char strBuff; //用来存放所有字符串
char *p = strBuff; //p 指向 strBuff 中的字符串
char wordBuff; //转换后字符串变为单词(字符串)存放在此, 每个二维数组的第二维的第一个存放后面的字符串个数
int n; //用于接收开始的数字
int c; //临时的
int i; // 给 for 循环用
printf ("请输入:");
scanf ("%d", &n);
getchar ();
c = n;
//接收输入
while (c--)
{
fgets(str_tmp, 100, stdin);
Remove_the_newline_character (str_tmp);
strcpy (p,str_tmp);
p += strlen(str_tmp) + 1;
}
//转换
strToWord (strBuff, n, wordBuff);
//计算并打印
for (i =0; i < n; i++)
{
printf ("%d\n", compare (&wordBuff));
}
return(0);
}
void Remove_the_newline_character(char str[])
{
int tmp;
char *p;
p = str + strlen(str) -1;
*p = '\0';
}
void strToWord(char str[], // 字符串地址
int n, //指str中字符串的个数
char wordBuff[] // 单词地址
)
{
char *p = str;
int w_p; //指向 wordBuff 二维数组的第二维
int i, k;
int p_len;
int count = 0; //统计字符串的个数
for (i = 0; i < n; i++)
{
w_p = 1; //复位, 从1开始保留0 , 0存放个数
count = 0; //复位
p_len = strlen (p);
for (k = 0; k < p_len; k++)
{
if (*p != ' ')
{
wordBuff = *p;
p++;
}
else
{
wordBuff = '\0'; //把每个转换后的单词便为字符串
p++;
count++;
}
}
wordBuff = '\0'; // 为最后一次加 '\0'
count++; // 加上最后一个
wordBuff = count;
p++; // 使 p 指向下一个字符串
}
}
int compare(char str[]) //比较 一个字符串中不重复的单词个数并返回
{
char *p1 = str;
char *p2 = str;
int t = *p1; // str 中第一个是后面字符串的个数
int i, k;
int count = 1; // 第一个字符串先算上
t--; // t是字符串个数, 需要减一
p1++; //p1 指向第一个字符串
p2++;
p2 += strlen (p1) + 1;
for (i = 0; i < t; i++)
{
for (k = 0; k < t - i; k++)
{
if (i == 0) //只有第一次才 加 ,其他都 减
{
if (strcmp(p1, p2) != 0) //找不同
{
count++;
}
}
else
{
if (strcmp(p1, p2) == 0) //找相同
{
count--;
}
}
p2 += strlen (p2) + 1; // 指向下一个
}
p1 += strlen (p1) + 1; // p1 指向下一个
p2 = p1;
p2 += strlen(p1) + 1; // p2 复位
}
return count;
}
注:程序对空格特别敏感,测试时要多留意
程序写的不好,请多包涵
程序不敢保证没有问题,只是简单测试了几下,应该还有bug
页:
[1]