|
发表于 2016-1-3 11:35:54
|
显示全部楼层
- #include <stdio.h>
- #include <string.h>
- void Remove_the_newline_character (char str[]);
- void strToWord (char str[], // 字符串地址
- int n, //指str中字符串的个数
- char wordBuff[][100] // 单词(字符串)地址
- );
- int compare (char str[]); //比较 一个字符串中不重复的单词个数并返回
- int main()
- {
- char str_tmp[100]; //用于临时存放字符串
- char strBuff[100]; //用来存放所有字符串
- char *p = strBuff; //p 指向 strBuff 中的字符串
- char wordBuff[100][100]; //转换后字符串变为单词(字符串)存放在此, 每个二维数组的第二维的第一个存放后面的字符串个数
-
- 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[i][0]));
- }
- 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[][100] // 单词地址
- )
- {
- 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[i][w_p++] = *p;
- p++;
-
- }
- else
- {
- wordBuff[i][w_p++] = '\0'; //把每个转换后的单词便为字符串
- p++;
- count++;
- }
- }
-
- wordBuff[i][w_p++] = '\0'; // 为最后一次加 '\0'
- count++; // 加上最后一个
- wordBuff[i][0] = 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 |
|