我試圖按字母順序對這些預先確定的字串進行排序,但是我的 strcmp 和 strcpy 說我的 const char* 被函式中使用的 char* 違反了。
這是代碼;
#include <stdio.h>
#include <string.h>
#define size 10
int main(void) {
const char* cities[size] = { "Acushnet", "Dartmouth", "Fairhaven",
"Fall River", "Freetown", "Marion",
"Mattapoisett", "New Bedford", "Rochester", "Westport" };
//using values a and b to hold values
int a;
const char b;
for (int i = 0; i < size; i ) {
for (int a = i 1; a <= size; a ) {
if (strcmp(cities[i], cities[a]) > 0) {
strcpy(b, cities[i]);
strcpy(cities[i], cities[a]);
strcpy(cities[a], b);
}
}
}
}
uj5u.com熱心網友回復:
strcpy
期望char *
第一個引數const char *
為a ,第二個引數為a 。 b
這兩者都不是,而是一個const char
。此外,由于您的陣列成員具有 type const char *
,因此它們不能作為第一個引數傳遞給strcpy
。
由于您有一個指標陣列,您只需要交換指標本身,而不是它們指向的內容。
if (strcmp(cities[i], cities[a]) > 0) {
const char *tmp = cities[i];
cities[i] = cities[a];
cities[a] = tmp;
}
uj5u.com熱心網友回復:
變數b
的型別為const char
。
const char b;
所以這個函式呼叫 strcpy
strcpy(b, cities[i]);
沒有意義,因為函式的第一個引數必須具有型別char *
。您需要的是交換表示指標陣列元素的指標。
此外這個for回圈
for (int a = i 1; a <= size; a ) {
可導致訪問存盤器陣列之外cities
時a
等于size
因為指數的有效范圍是[0, size)
..
您需要將變數宣告b
為具有const char *
作為陣列元素型別的型別。
const char *b;
并至少按以下方式撰寫 for 回圈
for (int i = 0; i < size; i ) {
for ( int a = i 1; a < size; a ) {
if ( strcmp(cities[i], cities[a]) > 0) {
b = cities[i];
cities[i] = cities[a];
cities[a] = b;
}
}
}
這是一個演示程式。
#include <stdio.h>
#include <string.h>
int main( void )
{
const char* cities[] =
{
"Acushnet", "Dartmouth", "Fairhaven", "Fall River", "Freetown", "Marion",
"Mattapoisett", "New Bedford", "Rochester", "Westport"
};
const size_t size = sizeof( cities ) / sizeof( *cities );
for ( size_t i = 0; i < size; i )
{
for ( size_t j = i 1; j < size; j )
{
if ( strcmp( cities[j], cities[i] ) < 0 )
{
const char *tmp = cities[i];
cities[i] = cities[j];
cities[j] = tmp;
}
}
}
for ( size_t i = 0; i < size; i )
{
printf( "\"%s\" ", cities[i] );
}
putchar( '\n' );
return 0;
}
程式輸出是
"Acushnet" "Dartmouth" "Fairhaven" "Fall River" "Freetown" "Marion" "Mattapoisett" "New Bedford" "Rochester" "Westport"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/363650.html
下一篇:C#:使用分部類訪問字典