Как найти табуляцию в коде

LemanRass

0 / 0 / 0

Регистрация: 15.04.2013

Сообщений: 8

1

Как проверить строку на наличие табуляций?

09.10.2013, 22:00. Показов 6549. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Собственно, как проверить char строку на наличие табуляции?
Пробовал так, не вышло, в принципе логично почему, но увы, когда кончаются умные идеи, начинаешь пробовать уже любые.

C++
1
2
3
4
5
6
7
char str[80];
cin>>str;
for(int i = 0; i < 80; i++)
{
    if(str[i] == 't')
        cout<<"Есть <<i<< табуляций!";
}



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.10.2013, 22:00

Ответы с готовыми решениями:

Как посимвольно проверить строку, взятую из файла, на наличие определенных символов?
Нужно взять строку из текстового файла и посчитать знаки препинания в каждом предложении, не могу…

Как проверить строку на наличие не цифр
Нужно получить из модема USSD ответ про номер своего телефона. К сожалению, не всегда получается…

Как проверить строку Char на наличие цифр?
Как проверить строку Char на наличие цифр в си?

если, например, проверка на то начинается строка…

Как проверить строку на наличие определенных символов?
Здравствуйте!

Вот у меня, напр., есть текст, и строка из некоторых символов.
Мне надо узнать,…

8

BumerangSP

4299 / 1421 / 463

Регистрация: 16.12.2010

Сообщений: 2,939

Записей в блоге: 3

09.10.2013, 23:14

2

C++
1
cin.getline(str, 80);

вместо

C++
1
cin >> str;



0



gazlan

3174 / 1933 / 312

Регистрация: 27.08.2010

Сообщений: 5,131

Записей в блоге: 1

09.10.2013, 23:42

3

C++
1
2
3
char*    pTab = strchr(String,'t');
 
printf("%sn",pTab  ?  "Tabbed"  :  "Is NOT tabbed");



0



0 / 0 / 0

Регистрация: 15.04.2013

Сообщений: 8

10.10.2013, 10:08

 [ТС]

4

А если мне нужно узнать какой именно символ в строке табуляция что бы потом программно заменить его на пробел?



0



gazlan

3174 / 1933 / 312

Регистрация: 27.08.2010

Сообщений: 5,131

Записей в блоге: 1

10.10.2013, 10:40

5

Цитата
Сообщение от LemanRass
Посмотреть сообщение

какой именно символ

C++
1
return pTab  ?  String - pTab  :  -1;

Добавлено через 1 минуту

Цитата
Сообщение от LemanRass
Посмотреть сообщение

программно заменить его на пробел

Не дочитал 🙂

C++
1
2
3
4
if (pTab)
{
   *pTab = 0x20;
}



0



LemanRass

0 / 0 / 0

Регистрация: 15.04.2013

Сообщений: 8

10.10.2013, 18:31

 [ТС]

6

Такая проверка проверяет строку есть ли там табуляция или нет, но не дает возможности не трогая остальной текст в строке определить где табуляция и просто заменить именно ее а не всю строку в которой есть табуляция.
Вот собственно то что пока написал я.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define COUNT 3
 
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
    int match = 0;
    char str[COUNT][128];
    string s[COUNT];
 
    for(int i=0; i<COUNT; i++)
        getline(cin,s[i]);
 
    printf("nОтформатировано!n");
    for(int i = 0; i < COUNT; i++)
    {
        if(!s[i].empty())
        {
            strcpy(str[i],s[i].c_str());
            for(int j = 0; j < strlen(str[i]); j++)
            {
                if(str[i][j] == ' ' || strchr(str[i],'t'))
                {
                    match++;
                    continue;
                }
                else 
                    {
                        if(match > 1)
                            cout<<" "<<str[i][j];
                        else
                            cout<<str[i][j];
                    }
                match = 0;
            }
            printf("n");
        }
    }
}

Суть программы: В каждой строке что вводится с клавиатуры заменять кучу пробелов и табуляций на 1 пробел, и удалять пустые строки.
Извините что код не оптимизирован, я обычно оптимизирую его после того как он начинает правильно работать.



0



3174 / 1933 / 312

Регистрация: 27.08.2010

Сообщений: 5,131

Записей в блоге: 1

10.10.2013, 19:05

7

Цитата
Сообщение от LemanRass
Посмотреть сообщение

не трогая остальной текст в строке определить где табуляция и просто заменить именно ее

Именно это и делается. In place. Без всяких ужасов с STL и копированием.



0



LemanRass

0 / 0 / 0

Регистрация: 15.04.2013

Сообщений: 8

12.10.2013, 00:17

 [ТС]

8

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Решил проблему вообщем так: 
if(arr[i][j] == 't')
{
  match++;
  continue;
}
else
{
  if(match > 0)
    printf(" ");
  else
    printf("%c",arr[i][j]);
}



0



3174 / 1933 / 312

Регистрация: 27.08.2010

Сообщений: 5,131

Записей в блоге: 1

12.10.2013, 00:37

9

Цитата
Сообщение от LemanRass
Посмотреть сообщение

в общем, так:

Потерял нить… Что именно вам требуется? Подсчет, знание позиции, удаление, замена, еще что-то?

И как двумерный массив arr[i][j] связан с проверить char строку на наличие табуляции?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

12.10.2013, 00:37

Помогаю со студенческими работами здесь

Как проверить строку с числами на наличие слов или букв?
Здравствуйте. Допустим, дана строка &quot;1,2,4,Ф&quot;. Нужно сделать исключение что если в строке есть…

Проверить строку на наличие слов
Здравствуйте!
Дан массив слов и строка текста. Проверить строку на наличие слов, не входящих в…

Проверить строку на наличие чисел (0-9)
вроде все правильно пишу, до этого с VAL пробовал, ничего не помогает :help:
var s,w:string;…

Проверить строку на наличие похожести
Пример 1:
Есть IP: XXX.XX.XXX.X
Если есть другой IP, 111.11.111.1, то выполнится действие некое….

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

i have string
str=”123 456″;

between 3 and 4 there are spaces and tabs ,how can i decern
the spaces from tabs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ques
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            pp();
        }

        private void pp()
        {
            int i,SumTab, SumSpace, len;
            string str;
            char[] characterArray = new char[250];

            str = "123       456";
            SumTab = 0;
            SumSpace = 0;
            len = str.Length;
            str.CopyTo(0, characterArray, 0, len);
            for (i = 0; i < str.Length; i++)
            {
                if (characterArray[i] == ' ') 
                    SumSpace++;
                else if (characterArray[i] == ' ')
                    SumTab++;
                else ;
            }
        }
   }
}


t is tab.

if (characterArray[i] == ' ')
  SumSpace++;
else if (characterArray[i] == 't')
  SumTab++;

You can also use linq:

public int CharCount(char character, string myString)
{
    int count = (from c in myString 
                 where c == character
                 select c).Count();
    return count;
}

And call it like this:

int spaceCount = CharCount(' ', "123 456");
int tabCount   = CharCount('t', "123 456");

You can also do it this way if you don’t like (or can’t use) LINQ:

public int CharCount(char character, string myString)
{
    int count = 0;
    int pos = 0;
    do
    {
        pos = myString.IndexOf(character, pos);
        if (pos >= 0)
        {
            count++;
        }
    } while (pos >= 0);
    return count;
}

If you trying to find the number of spaces and tabs quickly, with no worry for optimization, another way to do is, utilize the exiting method of String.Split[^]

String.Split will return an array of strings with the split strings based on your criteria, then you need to count your array size and your are done.

str = "123       456";
string [] split = str.Split(new Char [] {' '});
spaces = split.Length - 1

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Как распознать табуляцию при чтении файла?

Здравствуйте. Помогите пожалуйста решить проблему.
Считываю построчно файл. Хочу чтобы когда в файле наступает конец строки, выводился пробел.

while (scanner.hasNext()) {
                string=scanner.next();
                if(string=="t")
                    string1=string1+" ";
                else
                string1=string1+string;
    }     
       System.out.println(string);

Однако не могу выловить эту самую табуляцию.


  • Вопрос задан

    более трёх лет назад

  • 1441 просмотр

Сергей, например

boolean a = false;
                for (int i = 0; i < string.length(); i++) {
                    if (string.charAt(i) == 'r') {
                        a = true;
                        break;
                    }

                }
                if (a==true)
                {string1 = string1 + string+" ";a=false;}
                else
                    string1 = string1 + string;
                // System.out.println(string);
            }

Не отлавливает конец строки

Пригласить эксперта

” ” (ASCII 32 (0x20)), обычный пробел.
“t” (ASCII 9 (0x09)), символ табуляции.
“n” (ASCII 10 (0x0A)), символ перевода строки.
“r” (ASCII 13 (0x0D)), символ возврата каретки.
“” (ASCII 0 (0x00)), NUL-байт.
“x0B” (ASCII 11 (0x0B)), вертикальная табуляция.


  • Показать ещё
    Загружается…

22 мая 2023, в 18:02

3000 руб./в час

24 мая 2023, в 16:29

1200 руб./в час

24 мая 2023, в 16:05

2000 руб./за проект

Минуточку внимания

 
z3f
 
(2004-05-30 17:35)
[0]

Глупый вопрос конечно, но я не могу его решить.=(
Есть текстовый файл с разделителями в строках (символ табуляции). После табуляции стоят числа.
Файл:
1. Опа      232425 руб
2. Ага      7678890 руб

Сумма ?
Нужно выловить числа и сосчитать сумму.
Вопрос простой, ноя не могу вспомнить как определить символ табуляции и наличие пробела (в принципе пробел это st=” “??).
А вот как быть с табуляцией?

С уважением z3f.


 
Gero ©
 
(2004-05-30 17:38)
[1]

#9


 
z3f
 
(2004-05-30 18:37)
[2]

Еще вопрос в принципе по тому же поводу=(

Код:
Repeat
    while not EOLN(f_old) do
     begin
     read (f_old,ch);
     write (f_new,ch);
     stf:=” “;
     if ch=#9 then
         begin
           while ch<>” ” do
           begin
             read(f_old,ch);
             stf:=stf+ch;
           end;
           write (f_new,stf);
           val(stf,m,j);
           setlength (a,i);
           a[i]:=m;
           inc(i);
         end;
    end;
    writeln(f_new);
    readln(f_old);
    Until eof(f_old);
ch – переменная типа char
stf – переменная типа string
по первому проходу по строке(когда находит число) отлично сохранняет в массиве числовое значение.
по второму проходу когда натыкается на число проиходит ошибка в выделенной строке.
Не подскажите в чем проблема?


 
Gero ©
 
(2004-05-30 18:42)
[3]

Ужасный код…
Как объявлены f_old и f_new?
Что вобще этот код должен сделать в процессе работы?


 
z3f
 
(2004-05-30 18:53)
[4]

Код:
procedure TForm2.Button1Click(Sender: TObject);
var f_old, f_new : TextFile; // f_new – test_new.txt, f_old – test.txt
   st,str,stf : string;
   a: array of Integer;
   i,j,m: Integer;
   ch: char;
begin
  if FileExists(“test_new.txt”) then   // если новый файл есть – тады удаляем его
     begin
       AssignFile(f_new,”test_new.txt”);
       Reset(f_new);
       CloseFile(f_new);
       Erase(f_new);
     end;
// создаем новый файл с именем test_new.txt
  AssignFile(f_new,”test_new.txt”);
  AssignFile(f_old,”test.txt”);
  ReSet(f_old);  //только читаем test.txt
  ReWrite(f_new); //пишем в файл test_new.txt
  i:=1;
//обрабатываем исходный файл и результат обработки записываем в новый файл
  Repeat
    while not EOLN(f_old) do
     begin
     read (f_old,ch);
     write (f_new,ch);
     stf:=””;
     if ch=#9 then
         begin
           while ch<>” ” do
           begin
             read(f_old,ch);
             stf:=stf+ch;
           end;
           write (f_new,stf);
           val(stf,m,j);
           setlength (a,i);
           a[i]:=m;
           inc(i);
         end;
    end;
    writeln(f_new);
    readln(f_old);
    Until eof(f_old);
//конец обработки исходного файла
  CloseFile (f_old);
  CloseFile (f_new);
  Form1.Show; // показываем окно с результатами
  Form2.Hide; // прячем окно с исходным текстом
end;

Задача такая – есть текстовый файл вида:
Справка за июль месяц.
Стоимость по одному виду  23434 тыс руб
Стоимость по второму виду  938 тыс руб
Стоимость по третьему виду  23 тыс руб
Сумма  26 тыс руб

Требуется сосчитать сумму нечетных значений.
Упростил на данный момент – просто сосчитать сумму всех значений и соответственно вывести в новый файл (test_new.txt).
Выгребаю все числа из строчек (плевать – даже сумму на первом этапе)и закидываю их в массив (a[i]).
Все нормально по первому проходу.
После него a[1]=23434
stf=23434.
потом stf=””становится.
И когда второй раз программа набредает на число(в данном случае 9) ломается на фразе stf:=stf+ch.

Вот такая проблема.

С уважением z3f.


 
Gero ©
 
(2004-05-30 19:13)
[5]

function GetFileSum(FName : string) : Integer;
var
 S : string;
 i : Integer;
begin
 Result := 0;
 with TStringList.Create do
   try
     LoadFromFile(FName);
     for i := 0 to Count -1 do
       begin
         S := Strings[i];
         S := Copy(S, Pos(#9, S) + 1, Length(S) - Pos(#9, S));
         S := Copy(S, 1, Pos($20, S) - 1);
         Result := Result + StrToIntDef(S, 0);
       end;
   finally
     Free;
   end;
end;

Не проверял..


 
z3f
 
(2004-05-30 19:32)
[6]

[Ошибка] Proba_bank_2.pas(45): Incompatible types
[Ошибка] Proba_bank_2.pas(95): Undeclared identifier: “Count”
[Ошибка] Proba_bank_2.pas(96): Missing operator or semicolon
[Ошибка] Proba_bank_2.pas(16): Unsatisfied forward or external declaration: “TForm2.GetFileSum”
[Фатальная ошибка] Proba_bank_prj.dpr(6): Could not compile used unit “Proba_bank_2.pas”

Это вот такое выдается=)
Проблема в том что нужно каком образом(правльным) добавлять к string переменную типа char. Я по ходу это делаю неправильно! (по моему).

Кроме того нужно выполнять еще массу операций над числами – это не единственное что нужно сделать. Поэтому нужно забивать таким образом массив (просто с ним в итоге будет проще работать!).

Может есть какое-либо другое решение?
Помогите!

С уважением z3f.


 
Gero ©
 
(2004-05-30 19:50)
[7]

Блин, ну что подумать совсем никак?
Или F1 нажать?

var A : array of Integer;

procedure FillArray(FName : string);
var
 S : string;
 i, NumCount : Integer;
begin
 with TStringList.Create do
   try
     LoadFromFile(FName);
     SetLength(A, Count);
     NumCount := 0;
     for i := 0 to Count -1 do
       begin
         S := Strings[i];
         S := Copy(S, Pos(#9, S) + 1, Length(S) – Pos(#9, S));
         S := Copy(S, 1, Pos(” “, S) – 1);
         A[NumCount] := StrToIntDef(S, -1);
         if A[NumCount] > -1 then Inc(NumCount);
       end;
   finally
     Free;
   end;
end;

Код, правда, далеко не идеален, но будет работать.


 
z3f
 
(2004-05-30 20:53)
[8]

Послушался Вашего совета Gero.
Все работает=) Практически=)
Проходит практически весь файл но на очередно readln – дохнет.=(
Тектовый файл:
Справка за июль месяц.

Стоимость по одному виду  23434 тыс руб
Стоимость по второму виду  938 тыс руб
Стоимость по третьему виду  23 тыс руб
Стоимость по четвертому виду  4895 тыс руб
Сумма  26 тыс рубл

Когда доходит до строки Сумма  26 тыс рубл – readln – дохнет=(
Говорит – invalid pointer=(
КОД:

procedure TForm2.Button1Click(Sender: TObject);
var F_OLD, F_NEW : TextFile; // f_new – test_new.txt, f_old – test.txt
   st : string;
   a : array of Integer;
   i : Integer;
begin
  AssignFile(F_NEW,”test_new.txt”);
  AssignFile(F_OLD,”test.txt”);
  ReSet(F_OLD);  //только читаем test.txt
  ReWrite(F_NEW); //пишем в файл test_new.txt
  i:=1;
  Repeat
    Readln(F_OLD, st); //здесь дохнем с ошибкой Invalid Pointer=(
    St := Copy(St,Pos(#9,St)+1,Length(St)-Pos(#9,St));
    St := Copy(St,1,Pos(” “,St)-1);
    SetLength(A, i);
    A[i] := StrToIntDef(St, -1);
    if A[i]>-1 then
     begin
       writeln(F_NEW,a[i]);
       Inc(i);
     end;
  Until eof(F_OLD);
  CloseFile(F_OLD);
  CloseFile(F_NEW);
  Form2.Hide; // прячем окно с исходным текстом
  Form1.Show; // показываем окно с результатами
end;
Помогите еще раз опжалуйста!

С уважением z3f.


 
GEN++ ©
 
(2004-05-30 21:36)
[9]

>z3f  
А что мешает загрузить входной файл в StringList1 далее
обрабатывать каждую строку и результат писать в StringList2,
по окончании операции сохранять StringList2 в файле.


 
Anatoly Podgoretsky ©
 
(2004-05-30 21:45)
[10]

Gero ©   (30.05.04 19:50) [7]
Ну парень ты влетел 🙂


 
z3f
 
(2004-05-30 22:04)
[11]

Да не влетел он=)
Он все правльно написал – я просто не захотел вникнуть в код и разбираться с кодом который написал Gero ©=)
А он все правильно написал=)
Проcто после его кода я внимательно почитал что выдает F1 на каждую из им написанных функций и все понял.
Пришлось немного адаптировать под себя и все – заработало!!!!!

Всем громадное спасибо за помощь!!!

С уважением z3f.


In HTML, there is no character for a tab, but I am confused as to why I can copy and paste one here: ” ” (You can’t see the full width of it, but if you click to edit my question, you will see the character.) If I can copy and paste a tab character, there should be a unicode equivalent that can be coded into html. I know it doesn’t exist, but this is a mystery I’ve never been able to grasp.

So my question is: why is there not a unicode character for a tab even if I can copy and paste it?

MestreLion's user avatar

MestreLion

12.5k6 gold badges66 silver badges57 bronze badges

asked Mar 12, 2012 at 2:21

Abbey Graebner's user avatar

Abbey GraebnerAbbey Graebner

1,7972 gold badges10 silver badges8 bronze badges

3

Try &emsp;

as per the docs :

The character entities &ensp; and &emsp; denote an en space and an em
space respectively, where an en space is half the point size and an em
space is equal to the point size of the current font. For fixed pitch
fonts, the user agent can treat the en space as being equivalent to A
space character, and the em space as being equuivalent to two space
characters.

Docs link : https://www.w3.org/MarkUp/html3/specialchars.html

Nisse Engström's user avatar

answered May 5, 2016 at 7:35

Abhishek Goel's user avatar

Abhishek GoelAbhishek Goel

18.5k11 gold badges86 silver badges65 bronze badges

0

put it in between <pre></pre> tags then use this characters

it would not work without the <pre></pre> tags

answered Mar 12, 2012 at 2:28

Raymund's user avatar

RaymundRaymund

7,5995 gold badges44 silver badges78 bronze badges

4

Posting another alternative to be more complete. When I tried the “pre” based answers, they added extra vertical line breaks as well.

Each tab can be converted to a sequence non-breaking spaces which require no wrapping.

"&nbsp;&nbsp;&nbsp;&nbsp;" 

This is not recommended for repeated/extensive use within a page. A div margin/padding approach would appear much cleaner.

answered Oct 20, 2014 at 22:19

crokusek's user avatar

crokusekcrokusek

5,2752 gold badges43 silver badges60 bronze badges

1

I use <span style="display: inline-block; width: 2ch;"> </span> for a two characters wide tab.

answered May 7, 2017 at 13:29

GrayFace's user avatar

GrayFaceGrayFace

1,1689 silver badges12 bronze badges

1

Tab is [HT], or character number 9, in the unicode library.

answered Mar 12, 2012 at 2:26

DanRedux's user avatar

DanReduxDanRedux

9,0396 gold badges23 silver badges41 bronze badges

As mentioned, for efficiency reasons sequential spaces are consolidated into one space the browser actually displays. Remember what the ML in HTML stand for. It’s a Mark-up Language, designed to control how text is displayed.. not whitespace :p

Still, you can pretend the browser respects tabs since all the TAB does is prepend 4 spaces, and that’s easy with CSS. either in line like …

 <div style="padding-left:4.00em;">Indenented text </div>

Or as a regular class in a style sheet

.tabbed {padding-left:4.00em;}

Then the HTML might look like

<p>regular paragraph regular paragraph regular paragraph</p>
<p class="tabbed">Indented text Indented text Indented text</p>
<p>regular paragraph regular paragraph regular paragraph</p>

answered Jan 9, 2018 at 22:03

Duane Lortie's user avatar

Duane LortieDuane Lortie

1,2751 gold badge12 silver badges16 bronze badges

1

Добавить комментарий