Como eu faria um loop for em todos os caracteres da string em C ++?
char
, Ponto de código Unicode, cluster de grafema estendido?
index
parte das respostas.
Como eu faria um loop for em todos os caracteres da string em C ++?
char
, Ponto de código Unicode, cluster de grafema estendido?
index
parte das respostas.
Respostas:
Fazendo um loop nos caracteres de a std::string
, usando um loop for baseado em intervalo (é do C ++ 11, já suportado em versões recentes do GCC, clang e VC11 beta):
std::string str = ???;
for(char& c : str) {
do_things_with(c);
}
Loop pelos caracteres de a std::string
com iteradores:
std::string str = ???;
for(std::string::iterator it = str.begin(); it != str.end(); ++it) {
do_things_with(*it);
}
Fazendo um loop pelos caracteres de a std::string
com um loop for antiquado:
std::string str = ???;
for(std::string::size_type i = 0; i < str.size(); ++i) {
do_things_with(str[i]);
}
Loop através dos caracteres de uma matriz de caracteres terminados em nulo:
char* str = ???;
for(char* it = str; *it; ++it) {
do_things_with(*it);
}
std::string
, que é apenas uma série de bytes.
Um loop for pode ser implementado assim:
string str("HELLO");
for (int i = 0; i < str.size(); i++){
cout << str[i];
}
Isso imprimirá a sequência de caracteres por caractere. str[i]
retorna caractere no índice i
.
Se for uma matriz de caracteres:
char str[6] = "hello";
for (int i = 0; str[i] != '\0'; i++){
cout << str[i];
}
Basicamente acima de dois, existem dois tipos de strings suportados pelo c ++. O segundo é chamado string c e o primeiro é chamado std string ou (c ++ string). Eu sugeriria usar c ++ string, muito fácil de manusear.
No C ++ moderno:
std::string s("Hello world");
for (char & c : s)
{
std::cout << "One character: " << c << "\n";
c = '*';
}
No C ++ 98/03:
for (std::string::iterator it = s.begin(), end = s.end(); it != end; ++it)
{
std::cout << "One character: " << *it << "\n";
*it = '*';
}
Para iteração somente leitura, você pode usar std::string::const_iterator
no C ++ 98 e for (char const & c : s)
ou apenas for (char c : s)
no C ++ 11.
auto
é sempre uma boa ideia. Ao usá-lo, a distinção entre begin()
e cbegin()
se torna relevante.
char & c
)? É apenas para permitir a modificação do valor do caractere, caso seja necessário?
Aqui está outra maneira de fazer isso, usando o algoritmo padrão.
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string name = "some string";
std::for_each(name.begin(), name.end(), [] (char c) {
std::cout << c;
});
}
const char* str = "abcde";
int len = strlen(str);
for (int i = 0; i < len; i++)
{
char chr = str[i];
//do something....
}
strlen
na condição de loop, pois requer uma operação O (n) na string para cada iteração, tornando todo o loop O (n ^ 2) no tamanho da string. strlen
na condição do loop pode ser solicitada se a sequência for alterada durante o loop, mas deve ser reservada para os casos em que é realmente necessária .
Não vejo nenhum exemplo usando um intervalo baseado em loop com uma "string c".
char cs[] = "This is a c string\u0031 \x32 3";
// range based for loop does not print '\n'
for (char& c : cs) {
printf("%c", c);
}
exemplo não relacionado, mas int array
int ia[] = {1,2,3,4,5,6};
for (int& i : ia) {
printf("%d", i);
}
Para C-string ( char []
), você deve fazer algo assim:
char mystring[] = "My String";
int size = strlen(mystring);
int i;
for(i = 0; i < size; i++) {
char c = mystring[i];
}
Pois std::string
você pode usar str.size()
para obter seu tamanho e iterar como no exemplo, ou pode usar um iterador:
std::string mystring = "My String";
std::string::iterator it;
for(it = mystring.begin(); it != mystring.end(); it++) {
char c = *it;
}
for (int x = 0; x < yourString.size();x++){
if (yourString[x] == 'a'){
//Do Something
}
if (yourString[x] == 'b'){
//Do Something
}
if (yourString[x] == 'c'){
//Do Something
}
//...........
}
Uma String é basicamente uma matriz de caracteres; portanto, você pode especificar o índice para obter o caractere. Se você não conhece o índice, pode repeti-lo como no código acima, mas ao fazer uma comparação, use aspas simples (que especifica um caractere).
Fora isso, o código acima é auto-explicativo.
você pode obter todos os caracteres de uma string usando a função at da biblioteca de strings, como eu fiz dessa maneira
string words;
for (unsigned int i = 0; i < words.length(); i++)
{
if (words.at(i) == ' ')
{
spacecounter++; // to count all the spaces in a string
if (words.at(i + 1) == ' ')
{
i += 1;
}
este é apenas um segmento do meu código, mas o ponto é que você pode acessar caracteres stringname.at(index)
std::string
?