所以我一直在尝试编写一个包含字符串的2阶段程序(它是一个常量字符串。它是给定的。)并且确实:
我需要帮助我的程序的第二部分,因为第一部分做得很好。执行代码时,我应该看到城市 按字母顺序排序 。但相反,我看到this胡说八道。
我是一个完整的菜鸟,我在每一个字符串/字符操作相关主题上遇到问题。所以任何有关任何事情的帮助都将受到赞赏。
#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]);
}
}
很抱歉初始化变量很糟糕,而且还用非英语写东西,但这段代码意味着我的工作表,而英语不是我的母语。和平
答案 0 :(得分:1)
strok
返回原始字符串中的指针。当你对cities数组进行排序时,你会通过重写不同大小的单词来搞乱原始字符串。
您需要做的是将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
,这样相同的函数将适用于其他数量的城市。