2011-03-10 7 views
0

Avant d'allumer les torches, j'essaie de m'apprendre le C++. J'ai l'impression d'en avoir une bonne idée, mais je dois plonger pour atteindre le fond si tu vois ce que je veux dire. J'essaye de déboguer un programme simple que j'essaye de faire pour m'apprendre. Ce but du programme est de trier par ordre alphabétique un tableau de chaînes en caractères imprimées chacun. Je devrais probablement utiliser des pointeurs ici quand je passe les tableaux à ma fonction length() mais je ne suis pas encore arrivé. Il y a tellement d'erreurs que je ne suis pas sûr de savoir où est l'erreur. S'il vous plaît dites-moi que c'est quelque chose comme un point-virgule manquant. Je suis assez sûr que la ligne if (itemsToSort [j] < firstInAZOrder) ne fonctionnera pas mais encore une fois, j'essaie d'apprendre la langue et je dois commencer quelque part.Problèmes de tri alphabétique des chaînes

main.cpp:

#include <iostream> 
#include "stringarray.h" 

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

int main (int argc, char * const argv[]) { 
    std::string itemsToSort[] = { 
     'bob', 'john', 'tyler', 'anthony', 'luke', 'eric' 
    }; 
    std::string sortedItems[length(itemsToSort)]; 
    string firstInAZOrder; 

    for (int i = 0; i < length(itemsToSort); i++) { 
     firstInAZOrder = itemsToSort[i]; 

     for (int j = i + 1; j < length(itemsToSort); j++) { 
      if (itemsToSort[j] < firstInAZOrder) { 
       firstInAZOrder = itemsToSort[j]; 
      } 
     } 

     sortedItems[i] = firstInAZOrder; 
    } 

    output(sortedItems); 
    return 0; 
} 

stringarray.cpp:

int length (std::string array) { 
    return sizeof(array)/sizeof(array[0]); 
} 

stringarray.h:

int length (std::string array); 

Voici la liste des erreurs et Xcode d'avertissement m'a donné:

  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:12:3: avertissement: constante de caractères multi-caractères -
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:12:18: avertissement: caractère constante trop longue pour son type
  • /Users/Tyler/Desktop/sort/main.cpp:12:27: avertissement: caractère constant trop longue pour son type
  • /Users/Tyler/Desktop/sort/main.cpp : In 'sortie void (int)' fonction:
  • /Users/Tyler/Desktop/sort/main.cpp:6: erreur: s int [int] 'types non valides pour indice de tableau
  • /Users/Tyler/Desktop/sort/main.cpp: Dans la fonction 'int main (int, char * const *)':
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur: conversion invalide de 'int' à 'const char *'
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur : initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocateur]'
  • /Users/Tyler/Desktop/sort/main.cpp:13: erreur: conversion non valide de 'int' à 'const char *'
  • /Users/Tyler/Desktop/sort/main.cpp:13: erreur: initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocateur] '
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur: conversion non valide de' int 'à 'const char *'
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur: initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: caractères_caractères, _Alloc = std :: allocateur] '
  • /Users/Tyler/Desktop/sort/main.cpp:13: erreur: conversion invalide de' int ' à 'const char *'
  • /Utilisateurs/Tyler/Bureau/sort/main.cpp: 13: erreur: initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocator] '
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur: conversion invalide de' int 'à' const char * '
  • /Utilisateurs/Tyler/Desktop/tri/main .cpp: 13: erreur: initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocator] '
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:13: erreur: conversion invalide de' int 'à' const char * '
  • /Users/Tyler/Desktop/sort/main.cpp:13: erreur: initialisation de l'argument 1 de 'std :: basic_string < _CharT, _Traits, _Alloc> :: basic_string (const _CharT *, const _Alloc &) [avec _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocateur] '
  • /Utilisateurs/Tyler/Desktop/sort/main.cpp:14: erreur: conversion de' std :: string * 'en non Type -scalar 'std :: string' a demandé
  • /Users/Tyler/Desktop/sort/main.cpp:15: erreur: 'string' n'a pas été déclarée dans ce champ
  • /utilisateurs/Tyler/Desktop/trier /main.cpp:15: erreur: attendu `; ' avant 'firstInAZOrder'
  • /Users/Tyler/Desktop/sort/main.cpp:17: Erreur: la conversion de 'std :: string *' type non scalaire 'std :: string' a demandé
  • /Utilisateurs /Tyler/Desktop/sort/main.cpp:18: erreur: 'firstInAZOrder' n'a pas été déclaré dans cette portée
  • /Users/Tyler/Desktop/sort/main.cpp:20: erreur: conversion de 'std :: string * type non scalaire 'std :: string' a demandé
  • /Users/Tyler/Desktop/sort/main.cpp:26: erreur: 'sortedItems' n'a pas été déclarée dans ce champ
  • /utilisateurs/Tyler/Desktop/sort/main.cpp: 29: erreur: 'sortedItems' n'a pas été déclaré dans cette portée
  • /Utilisateurs/Tyler/Desktop/sort/stringarray.cpp:10: erreur: 'chaîne' n'est pas membre de 'std'
  • /Utilisateurs/Tyler/Desktop/sort/stringarray.cpp:10: erreur: attendu ',' ou ';' avant « { » jeton

Répondre

3

d'abord:

std::string itemsToSort[] = { 
    'bob', 'john', 'tyler', 'anthony', 'luke', 'eric' 
}; 

Le caractère apostrophe (') ne peuvent être utilisés sur un seul caractère. Utilisez des guillemets doubles (") pour cela:

std::string itemsToSort[] = { 
    "bob", "john", "tyler", "anthony", "luke", "eric" 
}; 

Suivant:

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

Cette fonction prend un seul entier, et ce n'est pas ce que vous voulez du tout En supposant que vous voulez apprendre comment. utiliser des pointeurs, vous pouvez essayer quelque chose comme:

void output (int* intArray, int arraySize) { 
    for (int i = 0; i < arraySize; ++i) { 
     std::cout << intArray[i] << std::endl; 
    } 
} 

Cette fonction prend un pointeur sur un certain nombre d'entiers en mémoire, et le nombre qui sont là Cela résout le problème suivant du savoir. lorsque votre boucle for doit se terminer.

En code réel, vous utiliseriez quelque chose comme std::vector au lieu de int*.

+0

Merci. Je n'ai pas réalisé que les guillemets importaient. –

4

Une constante de chaîne doit être entre guillemets, pas apostrophes:

"bob" 

Les guillemets simples sont des constantes de caractères.

Ensuite,

int length (std::string array) { 
    return sizeof(array)/sizeof(array[0]); 
} 

devrait prendre un tableau en entrée, mais même alors ne fonctionnera pas et ne peuvent être fixés qu'en en faisant une macro (ce qui est un moyen sûr de vous interdit de la guilde des experts C++ pour une décennie) ou en faisant length une fonction de modèle, qui peut être un peu avancée. Utilisez std::vector à la place, il a une méthode size pour cela.

Enfin,

void output (int sortedItems) { 
    for (int i = 0; ; i++) { 
     std::cout << sortedItems[i] << std::endl; 
    } 
} 

ne prend pas vraiment un int, est-il? Une condition d'arrêt dans la boucle serait également agréable, pour empêcher les dragons proverbiaux de s'envoler vers le nez.

+0

Cela a beaucoup aidé. :) –

+1

Il est assez facile de trouver la taille d'un tableau: 'template longueur int (const T (&) [N]) {return N;} ' –

+0

Et c'est encore plus facile de trouver la longueur d'un 'std :: string':' s.length() '. –

0

Il suffit de corriger les erreurs une à la fois -

La première est parce que vous avez besoin des guillemets doubles (") pas des guillemets simples (')

Le second - essayez sortedItems int *

Continuez à redcuing un à la fois, après la compilation, le débogueur sera votre ami

+0

Merci. Cela a réduit les erreurs de moitié. –