UVa10815 Andy's First Dictionary
题意:输入一个文本,找出所有不同的单词(连续字母序列),按字典序从小到大输出。单词不分大小写。
#include<string> #include<set> #include<sstream> #include<iostream> using namespace std; set<string> dict; string s, buf; int main() { while(cin >> s) { for(int i = 0; i < s.length(); i++) if(isalpha(s[i])) s[i] = tolower(s[i]); else s[i] = ' '; stringstream ss(s); while(ss >> buf) dict.insert(buf); } for(set<string>::iterator it = dict.begin(); it != dict.end(); ++it) cout << *it << "\n"; return 0; }
函数名称: isalpha
函数原型: int isalpha(char ch);
函数功能: 检查ch是否是字母.
函数返回: 是字母返回非0(在vs2015中为2) ,否则返回 0.
参数说明:
所属文件 <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
int main()
{
char ch1='*';
char ch2='a';
if(isalpha(ch1)!=0)
printf("%c is the ASCII alphabet\n",ch1);
else
printf("%c is not the ASCII alphabet\n",ch1);
if(isalnum(ch2)!=0)
printf("%c is the ASCII alphabet\n",ch2);
else
printf("%c is not the ASCII alphabet\n",ch2);
return0;
}
函数名称: iscntrl
函数原型: int iscntrl(int ch);
函数功能: 检查ch是否控制字符(其ASCII码在0和0x1F之间,数值为 0-31).
函数返回: 是返回非0,否则返回 0.
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<ctype.h>
char chars[]={'A',0x09,'Z'};
#define SIZE sizeof(chars)/sizeof(char)
int main()
{
int i;
for(i=0;i<SIZE;i++)
{
printf("Char%cis%saControlcharacter\n",
chars[i],(iscntrl(chars[i]))?"":"not");
}
return 0;
}
函数名称: isdigit
函数原型: int isdigit(char ch);
函数功能: 检查ch是否是数字(0-9)
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
int main()
{
char ch1='1';
char ch2='a';
if(isdigit(ch1)!=0)
printf("%c is the ASCII number\n",ch1);
else
printf("%c is not the ASCII number\n",ch1);
if(isdigit(ch2)!=0)
printf("%c is the ASCII number\n",ch2);
else
printf("%c is not the ASCII number\n",ch2);
return0;
}
[1]
函数名称: isgraph
函数原型: int isgraph(int ch);
函数功能: 检查ch是否可显示字符(其ASCII码在0x21到0x7E之间),不包括空格
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
int main()
{
charch1='';
charch2='a';
if(isgraph(ch1)!=0)
printf("%cistheASCIIprintablecharacter\n",ch1);
else
printf("%cisnottheASCIIprintablecharacter\n",ch1);
if(isgraph(ch2)!=0)
printf("%cistheASCIIprintablecharacter\n",ch2);
else
printf("%cisnottheASCIIprintablecharacter\n",ch2);
return0;
}
函数名称: islower
函数原型: int islower(int ch);
函数功能: 检查ch是否小写字母(a-z)
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include<ctype.h>
charchars[]={'A','a','z','Z'};
#defineSIZEsizeof(chars)/sizeof(char)
int main()
{
int i;
for(i=0;i<SIZE;i++){
printf("Char%cis%salowercasecharacter\n",chars[i],(islower(chars[i]))?"":"not");
}
return0;
}
函数名称: isupper
函数原型: int isupper(int ch);
函数功能: 检查ch是否是大写字母(A-Z)
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
#include<ctype.h>
charchars[]={'A','a','z','Z'};
#defineSIZEsizeof(chars)/sizeof(char)
int main()
{
inti;
for(i=0;i<SIZE;i++){
printf("Char%cis%sanuppercasecharacter\n",
chars[i],(isupper(chars[i]))?"":"not");
}
return0;
}
函数名称: tolower
函数原型: int tolower(int ch);
函数功能: 将ch字符转换为小写字母
函数返回: 返回ch所代表的字符的小写字母
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
intmain()
{
charx='a',y='b',z='A',w='*';
printf("Character%ctoloweris%c\n",x,tolower(x));
printf("Character%ctoloweris%c\n",y,tolower(y));
printf("Character%ctoloweris%c\n",z,tolower(z));
printf("Character%ctoloweris%c\n",w,tolower(w));
return0;
}
函数名称: toupper
函数原型: int toupper(int ch);
函数功能: 将ch字符转换成大写字母
函数返回: 与ch相应的大写字母
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
charx='a',y='b',z='A',w='*';
printf("Character%ctoupperis%c\n",x,toupper(x));
printf("Character%ctoupperis%c\n",y,toupper(y));
printf("Character%ctoupperis%c\n",z,toupper(z));
printf("Character%ctoupperis%c\n",w,toupper(w));
return0;
}
函数名称: isalnum
函数原型: int isalnum(int ch);
函数功能: 检查ch是否是字母或数字
函数返回: 是字母或数字返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
intmain()
{
charch1='*';
charch2='a';
if(isalnum(ch1)!=0)
printf("%cistheASCIInumberoralphebet\n",ch1);
else
printf("%cisnottheASCIInumbernoralphebet\n",ch1);
if(isalnum(ch2)!=0)
printf("%cistheASCIInumberoralphebet\n",ch2);
else
printf("%cisnottheASCIInumbernoralphebet\n",ch2);
return0;
}
函数名称: isprint
函数原型: int isprint(int ch);
函数功能: 检查ch是否是可打印字符(包括空格),其ASCII码在0x20到0x7E之间
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
intmain()
{
charch1='\n';
charch2='a';
if(isprint(ch1)!=0)
printf("%cistheASCIIprintablecharcater\n",ch1);
else
printf("%cisnottheASCIIprintablecharcater\n",ch1);
if(isprint(ch2)!=0)
printf("%cistheASCIIprintablecharcater\n",ch2);
else
printf("%cisnottheASCIIprintablecharcater\n",ch2);
return0;
}
函数名称: ispunct
函数原型: int ispunct(int ch);
函数功能: 检查ch是否是标点字符(不包括空格),即除字母,数字和空格以外的所有可打印字符
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
intmain()
{
charch1=',';
charch2='a';
if(ispunct(ch1)!=0)
printf("%cistheASCIIpunct\n",ch1);
else
printf("%cisnottheASCIIpunct\n",ch1);
if(ispunct(ch2)!=0)
printf("%cistheASCIIpunct\n",ch2);
else
printf("%cisnottheASCIIpunct\n",ch2);
return0;
}
函数名称: isspace
函数原型: int isspace(int ch);
函数功能: 检查ch是否是空格符和跳格符(控制字符)或换行符
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
intmain()
{
charch1='';
charch2='a';
if(isspace(ch1)!=0)
printf("%cisthespacecharcater\n",ch1);
else
printf("%cisnotthespacecharcater\n",ch1);
if(isspace(ch2)!=0)
printf("%cisthespacecharcater\n",ch2);
else
printf("%cisnotthespacecharcater\n",ch2);
return0;
}
函数名称: isxdigit
函数原型: int isxdigit(int ch);
函数功能: 检查ch是否是一个16进制数学字符(即0-9,或A-F,或a-f)
函数返回: 是返回非0,否则返回0
参数说明:
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<ctype.h>
intmain()
{
charch1='1';
charch2='a';
if(isxdigit(ch1)!=0)
printf("%cistheASCIIhexadecimalnumber\n",ch1);
else
printf("%cisnottheASCIIhexadecimalnumber\n",ch1);
if(isxdigit(ch2)!=0)
printf("%cistheASCIIhexadecimalnumber\n",ch2);
else
printf("%cisnottheASCIIhexadecimalnumber\n",ch2);
return0;
}
函数名称: isascii
函数原型: int isascii(int ch)
函数功能: 测试参数是否是ASCII码0-127
函数返回: 是返回非0,否则返回0
参数说明: ch-被测参数
所属文件: <ctype.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<ctype.h>
charchars[]={'A',0x80,'Z'};
#defineSIZEsizeof(chars)/sizeof(char)
intmain()
{
inti;
for(i=0;i<SIZE;i++)
{
printf("Char%cis%sanASCIIcharacter\n",
chars[i],(isascii(chars[i]))?"":"not");
}
return0;
}
stringstream是字符串流。它将流与存储在内存中的string对象绑定起来。
在多种数据类型之间实现自动格式化。
1 stringstream对象的使用
#include<sstream> #include<iostream> using namespace std; int main() { string line,word; while(getline(cin,line)) { stringstream stream(line); cout<<stream.str()<<endl; while(stream>>word){cout<<word<<endl;} } return 0; }输入:shanghai no1 school 1989
输出:shanghi no1 school 1989
shanghai
no1
school
1989
2stringstream提供的转换和格式化
程序:
#include<sstream> #include<iostream> using namespace std; int main() { int val1 = 512,val2 =1024; stringstream ss; ss<<"val1: "<<val1<<endl //“val1: "此处有空格,字符串流是通过空格判断一个字符串的结束 <<"val2: "<<val2<<endl; cout<<ss.str(); string dump; int a,b; ss>>dump>>a >>dump>>b; cout<<a<<" "<<b<<endl; return 0; }输出为:val1: 512
val2: 1024
512 1024
第一处黑体字部分:将int类型读入ss,变为string类型
第二处黑体字部分:提取512,1024保存为int类型。当然,如果a,b声明为string类型,那么这两个字面值常量相应保存为string类型
3其他注意
stringstream不会主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消 耗,因些这时候,需要适时地清除一下缓冲 (用 stream.str("") )
#include <cstdlib> #include<iostream> #include<sstream> using namespace std; int main() { stringstream ss; string s; ss<<"shanghai no1 school"; ss>>s; cout<<"size of stream = "<<ss.str().length()<<endl; cout<<"s: "<<s<<endl; ss.str(""); cout<<"size of stream = "<<ss.str().length()<<endl; }输出:
size of stream = 19 s: shanghai size of stream = 0