string不能用scanf输入
作者:互联网
为了准备中考有半年多没有编程,现在恢复功力时明显手生
今天我在复习排序时遇见了一道题
洛谷P1781
题目描述
地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入格式
第一行为一个整数 n,代表竞选总统的人数。
接下来有 n 行,分别为第一个候选人到第 n 个候选人的票数。
输出格式
共两行,第一行是一个整数 m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入输出样例
输入 #15 98765 12365 87954 1022356 985678输出 #1
4 1022356
说明/提示
票数可能会很大,可能会到 100 位数字。
1≤n≤20
由于票数可能会到达一百位数字,int longlong都无法满足其需求,因此我考虑到了字符串,选择了string
第一次我的代码如下
1 #include <bits/stdc++.h> 2 #include <string> 3 using namespace std; 4 int n,m,k; 5 string p[25]; 6 void bijiao(){ 7 for(int i=1;i<=n;i++){ 8 if(p[i].size()>k){ 9 m=i; 10 k=p[i].size(); 11 } 12 if(p[i].size()==k){ 13 for(int j=0;j<k;j++){ 14 if(p[i][j]-'0'>p[m][j]-'0'){ 15 m=i; 16 break; 17 } 18 if(p[i][j]-'0'<p[m][j]-'0')break; 19 } 20 } 21 } 22 } 23 int main(){ 24 scanf("%d",&n); 25 for(int i=1;i<=n;i++){ 26 scanf("%s",&p[i]); 27 } 28 bijiao(); 29 printf("%d\n",m); 30 for(int i=0;i<k;i++){ 31 printf("%c",p[m][i]); 32 } 33 return 0; 34 }
运行程序时却显示“已停止工作”
我检查了好几遍认为我的代码里没有死循环一类bug,而且我也是刚开始尝试使用scanf输入字符串,因此我认为问题出在scanf上
将scanf,printf都替换成cin,cout后果然AC
之后询问老师才明白c++的string不能用scanf输入,需要用cin
而且我的代码中还有一个问题就是
scanf输入一个字符串时不需要加取址符,指针知识指出,一个字符串的地址默认是该字符串首字符的地址,即我代码中的p【i】【0】
标签:string,int,scanf,字符串,票数,输入 来源: https://www.cnblogs.com/TFLSc1908lzs/p/16542636.html