大家好 在这段代码中,当我写AaBc时,它会写'ABab'。 我应该在这段代码中改变什么,如果我想写它像'AaBb'???
#include <stdlib.h>
#include<iostream.h>
#include<string.h>
int main (void)
{
char string[128], temp;
int n, i, j;
printf("\nEnter string: ");
gets(string);
n = strlen(string);
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (string[i] > string[j])
{
temp = string[i];
string[i] = string[j];
string[j] = temp;
}
}
}
printf("\n%s", string);
printf("\n");
return 0;
}
答案 0 :(得分:7)
'A'
和'a'
的ASCII值不一样。 'A' == 65
和'a' == 97
。
因此,在进行比较时,您需要使用tolower
或toupper
进行比较,以确保您的值正确。进行比较后,您需要然后进行比较以查看它是大写还是小写(以确保上限,然后是更低的顺序)。
答案 1 :(得分:4)
首先需要进行不区分大小写的比较,如果字母相同,则需要进行区分大小写的比较。
#include <stdlib.h> #include<iostream.h> #include<string.h> int main (void) { char string[128], temp; int n, i, j; printf("\nEnter string: "); gets(string); n = strlen(string); for (i=0; i<n-1; i++) { for (j=i+1; j<n; j++) { int s = tolower(string[i]) - tolower(string[j]); if ( s == 0 ) { // letters are the same... now watch out for case s = string[i] - string[j]; } if (s > 0) { temp = string[i]; string[i] = string[j]; string[j] = temp; } } } printf("\n%s", string); printf("\n"); return 0; }
答案 2 :(得分:3)
您需要一个客户比较函数来传递给sort(或qsort)。
bool comp(char c1, char c2)
{
return tolower(c1) < tolower(c2);
}
int main()
{
std::string str = "ABab";
std::sort(str.begin(), str.end(), comp);
cout << str << endl;
return 0;
}