这份代码有什么问题#include<iostream> #include<cstring> #include<algorithm> using namespace std; int n, m; string s; int arr[20]; bool vis[30]; char chh[20][20]; int main() { cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> s; for (int j = 0; j < m; ++j) arr[j] = s[j]; sort(arr, arr + m); for (int j = 0; j < m; ++j) chh[i][j] = (char)arr[j]; } for (int j = 1; j < n; ++j) { for (int i = 0; i < n - j; ++i) { if (strcmp(chh[i], chh[i + 1]) > 0) { char tem[20]; strcpy(tem, chh[i]); strcpy(chh[i], chh[i + 1]); strcpy(chh[i + 1], tem); } } } for (int i = 0; i < n; ++i)cout << chh[i] << endl; for (int i = 0; i < n - 1; ++i) { memset(vis, 0, sizeof(vis)); int cnt = 0; for (int j = 0; j < m; ++j) { vis[chh[i][j] - 'a'] = 1; } for (int j = 0; j < m; ++j) { if (!vis[chh[i + 1][j] - 'a']) { cnt++; } } if (cnt != 1) { cout << "No"<<endl;return 0; } } cout << "Yes"; return 0; }
时间: 2023-12-06 17:42:56 浏览: 32
这份代码存在以下问题:
1. 对于字符串的字符排序,应该使用字符型数组,而不是整型数组。
2. 在字符串排序时,可以使用 `std::sort()` 函数进行排序,而不需要手动实现冒泡排序。
3. 在字符串比较时,应该使用 `std::string` 的比较函数,而不是 `strcmp()` 函数。
4. 字符串排序后,判断相邻两个字符串是否只有一个字符不同时,可以使用一个计数器 `cnt`,记录两个字符串不同字符的数量。
5. 在判断字符是否出现过时,可以使用一个布尔型数组 `vis` 来记录字符是否出现过。
6. 在输出结果时,应该将 `Yes` 改为 `Yes\n`,将 `No` 改为 `No\n`,以符合题目要求。
下面是修改后的代码:
相关问题
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <stack> #include <ctime> 怎么配置这些文件
这些文件是C++的头文件,不需要配置。在编写C++程序时,只需要在代码中包含这些头文件即可使用它们提供的函数和类。这些头文件一般都已经被安装在你的C++编译器中了,你只需要在代码中添加`#include`指令即可。比如,如果你想使用`iostream`头文件中的`cout`和`cin`,你可以这样写代码:
```
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World"<<endl;
return 0;
}
```
如果你使用的是Visual Studio等IDE,一般会自动帮你添加这些头文件,你只需要专注于代码的编写即可。
#include <iostream> #include <fstream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <climits> #include <string> #include <algorithm> #include <vector> #include <map> using namespace std; struct Value { char str[10000]; }; void structSort(Value *a, int n) { @你的代码 } int n; Value a[5000]; int main() { scanf("%d", &n); for (int i = 0; i<n; i++) { scanf("%s", a[i].str); } structSort(a, n); for (int i = 0; i<n; i++) { printf("%s\n", a[i].str); } return 0; }
这段代码给出了一个结构体数组 `a`,其中每个结构体包含一个字符串成员 `str`。接下来有一个函数 `structSort`,它需要你来实现。你需要使用任何一种排序算法对 `a` 数组进行排序,排序的依据是字符串的字典序(即按照字母顺序进行比较)。最后将排序后的字符串数组依次输出即可。
以下是可能的 `structSort` 实现方式之一,使用了标准库中的 `qsort` 函数:
```c++
int compare(const void *a, const void *b) {
return strcmp(((Value *)a)->str, ((Value *)b)->str);
}
void structSort(Value *a, int n) {
qsort(a, n, sizeof(Value), compare);
}
```
其中,`compare` 函数用于比较两个字符串的大小,将其作为参数传递给 `qsort` 函数进行排序。