#include<bits/stdc++.h> using namespace std; int main() { int num,i,j,t,k; cin>>num; vector<string> line(num); cin.ignore(); for(i=0;i<num;i++) { getline(cin,line[i]); } cin>>k; int temp[k]; for(i=0;i<k;i++) { cin>>t; temp[i]=t; } for(i=0;i<k;i++) { for(j=0;j<num;j++) { if(line[j][17]-'0'==temp[i]) { cout<<line[j].substr(0,17)<<line[j][19]<<endl; } } } }
时间: 2023-07-14 10:10:10 浏览: 57
这段代码是一个简单的C++程序,它的功能是从输入中读取一些字符串并进行一些处理。首先,它会读取一个整数num,表示接下来要输入的字符串的数量。然后,使用循环读取num个字符串,并将它们存储在名为line的vector中。接下来,它会读取一个整数k,表示要查询的次数。然后,使用循环读取k个整数,并将它们存储在名为temp的数组中。
最后,使用两个嵌套循环进行查询。外层循环遍历temp数组中的每个元素,内层循环遍历line数组中的每个字符串。如果line[j]的第18个字符转换为整数等于temp[i],则输出line[j]的前17个字符和第19个字符。
请注意,在读取num后,使用了cin.ignore()来忽略掉输入流中的换行符,以便正确读取后续的字符串。
这段代码可能是用于处理一些特定格式的数据,但没有提供足够的上下文信息来确定确切的用途。如果您有更多的问题,请随时提问。
相关问题
#include<bits/stdc++.h> using namespace std; int main(){ int n; int num[30]; int k=0; while(cin>>num[k++]); int m; cin>>m; vector<int>dp(m+1,0); dp[0]=1; int len=k; for(int i=1;i<=len;i++){ int n=num[i-1]; for(int j=0;j<=m;j++){ if(j>n){ dp[j]=dp[j]+dp[j-n]; } } } cout<<dp[m]<<endl; return 0; } 为什么无法输出
根据你提供的代码,你的程序无法输出结果的可能原因有几个:
1. 输入数据不符合预期:你使用了一个 `while` 循环来读取输入的整数,并将它们存储在 `num` 数组中。但是,你没有指定循环的结束条件。如果输入的整数数量超过了数组 `num` 的大小(30),它可能会导致数组越界,从而导致未定义的行为。
解决方法是在 `while` 循环中添加一个结束条件,例如 `k < 30`,以确保不会超过数组的最大大小。
2. 数组下标错误:在内层循环中,你在判断 `j > n` 条件时更新了 `dp[j]` 的值。然而,这样的操作可能会导致数组越界,因为 `dp` 的大小为 `m+1`,而 `j` 的范围是从 0 到 `m`。所以你需要将条件改为 `j >= n`。
3. 输出格式错误:在最后一行输出结果之前,你使用了 `endl` 来换行。但是,根据题目要求或者个人需求,你可能需要将换行符改为其他形式的输出,比如使用 `\n`。
修正后的代码应该类似于:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int num[30];
int k = 0;
while (k < 30 && cin >> num[k]) {
k++;
}
int m;
cin >> m;
vector<int> dp(m + 1, 0);
dp[0] = 1;
int len = k;
for (int i = 1; i <= len; i++) {
int n = num[i - 1];
for (int j = n; j <= m; j++) {
dp[j] = dp[j] + dp[j - n];
}
}
cout << dp[m] << "\n";
return 0;
}
```
请注意,这只是根据你提供的代码进行的修正,如果还有其他问题,请提供更多的信息以便我能够帮助你解决。
修改以下代码,使其作用不变 #include<bits/stdc++.h> using namespace std; int Mergesort(int a[],int left,int right); void Merge(int a[],int left,int mid,int right); long int num1[6]={0,100000,1000000,10000000,50000000,100}; int main() { int num; int w=0; clock_t star
修改后的代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
void Merge(int a[], int left, int mid, int right);
int Mergesort(int a[], int left, int right);
long int num1[6] = {0, 100000, 1000000, 10000000, 50000000, 100};
int main() {
int num;
int w = 0;
clock_t start, end;
cout << "请输入要排序的数字个数(不超过50000000):" << endl;
cin >> num;
int *a = new int[num];
for (int i = 0; i < num; i++) {
a[i] = rand() % num1[5] + 1;
}
start = clock();
Mergesort(a, 0, num - 1);
end = clock();
for (int i = 0; i < num; i++) {
cout << a[i] << " ";
}
cout << endl;
cout << "排序时间为:" << end - start << "ms" << endl;
delete[] a;
return 0;
}
void Merge(int a[], int left, int mid, int right) {
int *tmp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (a[i] < a[j])
tmp[k++] = a[i++];
else
tmp[k++] = a[j++];
}
while (i <= mid) tmp[k++] = a[i++];
while (j <= right) tmp[k++] = a[j++];
for (i = 0; i < k; i++)
a[left + i] = tmp[i];
delete[] tmp;
}
int Mergesort(int a[], int left, int right) {
int mid = (left + right) / 2;
if (left < right) {
Mergesort(a, left, mid);
Mergesort(a, mid + 1, right);
Merge(a, left, mid, right);
}
return 0;
}
```
修改的内容包括:
1. 在主函数中添加了一个输入语句,让用户输入要排序的数字个数。
2. 在主函数中动态申请了一个 int 数组 a,并使用随机数填充该数组。
3. 在主函数中添加了排序时间的输出。
4. 将函数 Mergesort 和 Merge 的顺序调换。
5. 在 Merge 函数中动态申请了一个 int 数组 tmp,并在函数结束后释放该数组的内存。