итерация с ++ через вектор строк

Поэтому я недавно обнаружил использование карты и векторов, однако у меня возникли проблемы с попыткой найти способ перебрать вектор, содержащий строки.

Вот что я попробовал:

#include <string>
#include <vector>
#include <stdio>

using namespace std;

void main() {
vector<string> data={"Hello World!","Goodbye World!"};

for (vector<string>::iterator t=data.begin(); t!=data.end(); ++t) {
cout<<*t<<endl;
}
}

и когда я пытаюсь скомпилировать его, я получаю эту ошибку:

cd C:\Users\Jason\Desktop\EXB\Win32
wmake -f C:\Users\Jason\Desktop\EXB\Win32\exbint.mk -h -e
wpp386 ..\Source\exbint.cpp -i="C:\WATCOM/h;C:\WATCOM/h/nt" -w4 -e25 -zq -od    -d2 -6r -bt=nt -fo=.obj -mf -xs -xr
..\Source\exbint.cpp(59): Error! E157: col(21) left expression must be integral
..\Source\exbint.cpp(59): Note! N717: col(21) left operand type is 'std::ostream watcall (lvalue)'
..\Source\exbint.cpp(59): Note! N718: col(21) right operand type is 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> (lvalue)'
Error(E42): Last command making (C:\Users\Jason\Desktop\EXB\Win32\exbint.obj) returned a bad status
Error(E02): Make execution terminated
Execution complete

Я попробовал тот же метод, используя карту, и это сработало. Единственная разница была в том, что я изменил строку cout:

cout<<t->first<<" => "<<t->last<<endl;

2

Решение

добавлять iostream заголовочный файл и изменение stdio в cstdio,

#include <iostream>
#include <string>
#include <vector>
#include <cstdio>

using namespace std;

int main()
{
vector<string> data={"Hello World!","Goodbye World!"};
for (vector<string>::iterator t=data.begin(); t!=data.end(); ++t)
{
cout<<*t<<endl;
}
return 0;
}
8

Другие решения

Когда я компилирую ваш код, я получаю:

40234801.cpp:3:17: fatal error: stdio: No such file or directory
#include <stdio>
^

У вас явно есть заголовок «stdio«в вашем пути включения, который вы не показали нам.

Если вы измените эту строку на стандарт #include <iostream>, то единственная ошибка, о которой сообщают, это то, что вы написали void main() вместо int main(), Исправьте это, и он будет построен и запущен.

Попутно отметим также, что using namespace необходимо избегать.

0

От Открытый Watcom V2 Fork-Вики на Страница состояния библиотеки C ++:

<строка>

В основном полный. Хотя здесь нет операторов ввода / вывода, доступны все другие функции-члены и строковые операции.

Обходной путь (помимо реализации << оператор) будет запрашивать экземпляры строки для строки C:

for (vector<string>::iterator t = data.begin(); t != data.end(); ++t) {
cout << t->c_str() << endl;
}

Это, конечно, работает только до тех пор, пока строки не содержат нулевых байтовых значений.

0

Я нашел решение своей проблемы. Вместо использования c_str я использовал std :: string и переключился на использование компилятора G ++ вместо Open Watcom

Вместо того, чтобы иметь:

char *someString="Blah blah blah";

Я вместо этого заменил это:

string someString="Blah blah blah";

Этот способ намного эффективнее и проще.

-2
По вопросам рекламы [email protected]