Błąd przy napisaniu metody substr

0

Hej!

mam taki oto fragment kodu:

while (getline(input, line))
          {
                if (line.substr(0,how_many_chars) != string::npos)
                cout << endl << line;
          }

I wyskakuje mi taki błąd:

|error: no matching function for call to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::substr(int, std::string&)'|
D:\Programy\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\basic_string.h|1839|note: candidates are: std::basic_string<_CharT, _Traits, _Alloc> std::basic_string<_CharT, _Traits, _Alloc>::substr(typename _Alloc::size_type, typename _Alloc::size_type) const [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Co on oznacza i jak mogę go usunąć?

0
how_many_chars

Jakiego typu jest ta zmienna ? Nie przypadkiem char ?
Spróbuj pokombinować z .c_str();

0

Co Twój kod ma robić? Bo w tym momencie sprawdzasz czy fragment tekstu jest różny od string::npos a to nie ma sensu.
http://www.cplusplus.com/reference/string/string/npos/

0

kod ma wypisywać 40 pierwszych znaków z przeniesieniem do nowej linii nie mieszczacych sie wyrazow po przekroczeniu limitu

0

how_many_chars powinno byc intem a za pewne nie jest
i tego sie nie porownuje do string::npos bo to nie ma sensu

0

40 pierwszych znaków z pliku czy z lini? Jeżeli z pliku to nie musisz czytać pliku pobierając każdą linię. To co napisałeś kompletnie nie ma sensu.


     int ile;
	char znak;
	cout << "Ile znaków chcesz wczytać?";
     cin >> ile;	
	for (int i = 0; i < ile; i++)
	{
		file >> znak;
		cout << znak;
	}

0
qblacksheep napisał(a):

40 pierwszych znaków z pliku czy z lini? Jeżeli z pliku to nie musisz czytać pliku pobierając każdą linię. To co napisałeś kompletnie nie ma sensu.


     int ile;
	char znak;
	cout << "Ile znaków chcesz wczytać?";
     cin >> ile;	
	for (int i = 0; i < ile; i++)
	{
		file >> znak;
		cout << znak;
	}

Z pliku, tak. Chciałbym określić pewną ilość znaków w linii, aby po przekroczeniu tego limitu przenosiło mi wyraz, który się nie zmieścił do nowej linii.

0

Pokaż co już napisałeś i opisz co Ci nie działa.

0
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    fstream input(argv[2]);
    ofstream output(argv[3]);
    string number(argv[1]);
    string line;
     how_many_chars = number;
          while (getline(input, line))
          {
                if (line.substr(0,how_many_chars) != string::npos)
                cout << endl << line;
          }
    output.close();
    input.close();
    return 0;
}

Na razie doszedłem do momentu sprawdzania ilości znaków w linii. Jeśli wyraz przekroczy limit znaków to przenosi go do nowej linii.

0

W poprzednich postach pisałem, że to co robisz - porównanie substringa do string::npos nie ma sensu. Wkleiłeś ten sam kod bez żadnej poprawki - nikt nie będzie robił wszystkiego za Ciebie. Ponownie odsyłam do zapoznania się z treścią: http://www.cplusplus.com/reference/string/string/npos/

1 użytkowników online, w tym zalogowanych: 0, gości: 1