c - 使用字符串操作和函数对数组进行冒泡排序
问题描述
问题
所以我一直在尝试编写一个包含字符串的两阶段程序(它是一个常量字符串。它是给定的。)并且执行以下操作:
- 查找以指定字母开头的项目,
- 按字母顺序对该字符串中的项目进行排序。
问题
我的程序的第二部分需要帮助,因为第一部分做得很好。当我执行我的代码时,我应该看到按字母顺序排列的城市。但相反,我看到了这种胡说八道。
我是一个完全的菜鸟,我在字符串/字符操作相关主题的每一点都遇到问题。因此,我们将不胜感激任何有关任何事情的帮助。
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void sortStartwB(const char strSehir[]);
void sortCities(const char strSehir[]);
int main()
{
const char strSehir[100] = "Bursa Yozgat Canakkale Balikesir Adana Eskisehir Bilecik";
sortStartwB(strSehir);
sortCities(strSehir);
return 0;
}
void sortStartwB(const char strSehir[])
{
char strNew[100];
strcpy(strNew, strSehir);
char *ptrSehir;
char strBsehir[50] = {};
ptrSehir = strtok(strNew, " ");
while (ptrSehir != NULL)
{
if (strncmp(ptrSehir, "B", 1) == 0)
{
strcat(strBsehir, ptrSehir);
strcat(strBsehir, " ");
}
ptrSehir = strtok(NULL, " ");
}
printf("\nb ile baslayan sehirler : \n%s\n", strBsehir);
}
void sortCities(const char strSehir[])
{
char strFunc[100];
char *strSorted[100];
int i = 0;
char temp[50];
strcpy(strFunc, strSehir);
strSorted[i]=strtok(strFunc, " ");
while (strSorted[i] != NULL)
{
strSorted[++i] = strtok(NULL, " ");
}
for (int j=0; j<6; j++)
{
for (int k=j+1; k<7; k++)
{
if (strcmp(strSorted[j], strSorted[k]) > 0)
{
strcpy(temp, strSorted[j]);
strcpy(strSorted[j], strSorted[k]);
strcpy(strSorted[k], temp);
}
}
}
for (int x=0; x < 7; x++)
{
printf("\n%s", strSorted[x]);
}
}
很抱歉初始化变量不好并且用非英语写东西,但这段代码意味着我的工作表,英语不是我的母语。和平
解决方案
返回原始字符串中的strok
指针。当您对城市数组进行排序时,您会通过将不同大小的单词重写到原始字符串中来弄乱原始字符串。
您需要做的是将每个城市名称复制char[]
得足够大,这样您就可以在上面重写任何其他城市名称,而不会弄乱其他城市名称。
这是一个应该有效的例子:
void sortCities(const char strSehir[])
{
char strFunc[100];
char strSorted[100][100];
char *city;
int i = 0;
char temp[50];
strcpy(strFunc, strSehir);
for (city = strtok(strFunc, " "); city != NULL; city = strtok(NULL, " "))
strcpy(strSorted[i++], city);
for (int j=0; j<6; j++)
{
for (int k=j+1; k<7; k++)
{
if (strcmp(strSorted[j], strSorted[k]) > 0)
{
strcpy(temp, strSorted[j]);
strcpy(strSorted[j], strSorted[k]);
strcpy(strSorted[k], temp);
}
}
}
for (int x=0; x < 7; x++)
{
printf("\n%s", strSorted[x]);
}
}
旁注:您应该用更通用的东西替换循环中的常量6
,7
以便相同的功能适用于其他数量的城市。
推荐阅读
- java - 创建或打开预先存在的项目时出现 Android 应用程序开发错误
- reactjs - React Native Flatlist 删除项目而不滚动到顶部
- php - 查询丢失的结果如果我使用 Php 但如果我在 Mysql 中运行则完整
- python - 如何定位/导入我的带有破折号的 plaid-python python 模块?
- tensorflow - 如何将 tfrecord 拆分为多个 tfrecord?
- excel - 使用粘贴方法获取运行时错误 1004
- python - 连接大量具有相同列和相同索引的熊猫数据框
- botframework - 使用 BotFramework Dispatch 的最佳情况
- mysql - 我应该使用什么方法在 SQL 中存储大量数据?
- javascript - 从 Object.entries 中提取值