Uva 10815.Andy's First Dictionary

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 10815.Andy's First Dictionary相关的知识,希望对你有一定的参考价值。

题意和思路都非常非常明确,直接读入->set->输出

然而,在读入上竟然出了问题

最早是是用的

string temp;
scanf("%s",temp);
printf("%s",temp);

这种写法,但是编译器报错,提示

error: cannot pass objects of non-trivially-copyable type ‘std::string {aka class std::basic_string<char>}‘ through ‘...‘
scanf("%s",s);

查了一下,是因为string类本身长度是不定的,在没有给他赋值上字符串前,是没意义的,而scanf需要一个地址来存储,所以直接读入是很有可能出现问题的。

而输出的时候,则由于c、c++不同的特性,需要用temp.c_str()

本来想换成cin读入,但是因为不关闭同步会很慢,就查了下怎么能读入更快,看到用 getchar() 更快,想了下,就自己写吧

里面顺便把大小写也转化了下

int read(char s[]){
    char c;
    int i=0;
    while(!(((c=getchar())>=A&&c<=Z)||(c>=a&&c<=z)))
        if(c==EOF)
            return 0;
    while((c>=A&&c<=Z)||(c>=a&&c<=z)){
        s[i++]=(c>=A&&c<=Z?c-A+a:c);
        c=getchar();
    }
    s[i]=\0;
    return i;
}

 

另外,在之前用string通过 for(int i=0;i<str.size();i++) 时,又出现了

omparison between signed and unsigned integer expressions [-Wsign-compare]

这个查了下是因为 str.size() 返回的是无符号整数,而i是有符号整数,所以两个直接比有可能会出现问题。

所以有了 for(size_t i=0;i<str.size();i++) 这种写法,其中 size_t 是std命名空间里的,他可以兼容不同的运行环境,保证与返回的size能够兼容

 

明明一个很简单的题,牵扯出来一群乱七八糟的问题,不过总算学了好多

 1 #include <cstdio>
 2 #include <set>
 3 #include <string>
 4 #include <cstring>
 5 #include <iostream>
 6 using namespace std;
 7 
 8 int read(char s[]){
 9     char c;
10     int i=0;
11     while(!(((c=getchar())>=A&&c<=Z)||(c>=a&&c<=z)))
12         if(c==EOF)
13             return 0;
14     while((c>=A&&c<=Z)||(c>=a&&c<=z)){
15         s[i++]=(c>=A&&c<=Z?c-A+a:c);
16         c=getchar();
17     }
18     s[i]=\0;
19     return i;
20 }
21 
22 int main(){
23     //freopen("in.txt","r",stdin);
24     set<string> s;
25     set<string>::iterator it;
26     char str[100];
27     while(read(str))
28         s.insert(str);
29 
30     for(it=s.begin();it!=s.end();it++)
31         cout<<*it<<endl;
32 
33     return 0;
34 }

 

以上是关于Uva 10815.Andy's First Dictionary的主要内容,如果未能解决你的问题,请参考以下文章

Uva 10815.Andy's First Dictionary

UVA - 10815 Andy's First Dictionary

UVa10815 Andy's First Dictionary (STL)

uva 10815,andy's first ditionary(set,stringstream的简单运用)

UVA - 10815Andy's First Dictionary (set)

10815 - Andy's First Dictionary解答