Как найти пробел в слове на с

При нахождение пробела в строке нужно завершить программу.

Что именно не так делаю?

for (i = 0; i < s.length(); i++)
{
    if (s.find(' '))
    {
        cout << "Найдем пробел";
        break;
    }
}

0xdb's user avatar

0xdb

51.3k194 золотых знака56 серебряных знаков232 бронзовых знака

задан 23 янв 2020 в 13:40

Salvador's user avatar

3

1) Здесь не нужен цикл. 2) find возвращает не bool, а число. string::npos если значение не найдено.

if (s.find(' ') != string::npos)
{
   cout << "Найден пробел";
}

Что бы завершить программу, можно использовать функцию exit например.

ответ дан 23 янв 2020 в 13:49

Потому что вы используете s.find() в цикле – поэтому вы будете получать ответ столько раз, сколько у вас символов в строке.

Функция find библиотеки string ищет последовательность заданных символов в заданной строке, и возвращает позицию первого вхождения.

Просто вынесите s.find() из цикла.

ответ дан 23 янв 2020 в 13:41

Vladimir Afanasyev's user avatar

Vladimir AfanasyevVladimir Afanasyev

2,3442 золотых знака7 серебряных знаков23 бронзовых знака

Я бы сделал не через фонд а циклом
for(int I = 0; I < string.size(); i++)
if(string[i] = ‘ ‘)
Действие

#include 
#include 
using namespace std; 
int main() { 
   string query; 
   getline(cin, query); 
   for (int i = 0; i <= query.size(); i++) { 
      if (query[i] == ' ') { 
         cout << i << endl; 
      } 
   } 
   cout << query.size() << endl; 
}

Vanyamba Electronics's user avatar

ответ дан 3 ноя 2022 в 9:44

Russell Morryson's user avatar

2

Канеки Кен

0 / 0 / 0

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

Сообщений: 75

1

Найти пробел в строке

02.05.2022, 13:05. Показов 405. Ответов 5

Метки c++, string (Все метки)


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

В программу вводится слово с пробелами в начале и конце. Нужно получить номер последней буквы слова до пробела (с учетом пробелов в начале).

Моя программа работает, если в конце слова не ставить пробелы. Но если поставить пару штук, то цикл почему-то не завершается. Подскажите, как исправить проблему.
Двигаться мне нужно до конца слова по одному символу с какого-то рандомного места.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    string slovo; 
    int i=3; // Начальное положение номера элемента (берется рандомное)
 
    cout << "Ведите слово:" << endl;
    getline(cin, slovo);
    cout << "Вы ввели:n"<< slovo << endl;
    
    //Движемся вправо до первого пробела
      while (slovo[i]) {
        if (slovo[i] != ' ') // После нахождения первого пробела цикл должен завершится
        i++;
    } 
    cout << "Положение последнего символа до пробела находится на " << i << "-ом элементе";
}



0



Programming

Эксперт

94731 / 64177 / 26122

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

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

02.05.2022, 13:05

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

как найти предыдущий пробел в строке?
Например я нахожусь в конце строки, как найти предыдущий пробел в строке?

В строке заменить пробел между слов на запятую и пробел
В строке заменить пробел между слов на запятую и пробел

В строке, состоящей из слов и знаков препинания (пробел . : , ! ?-;), найти слово максимальной длины
Помогите пожалуйста составить программу !!!
вот условие
В строке, состоящей из слов и знаков…

В строке, состоящей из слов и знаков препинания(пробел.:,!?-;),найти слово максимальной длины, не содержащее заданную букву
В строке, состоящей из слов и знаков препинания(пробел.:,!?-;), найти слово максимальной длины, не…

5

Нарушитель

8578 / 4583 / 1057

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

Сообщений: 21,487

02.05.2022, 14:29

2

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

Нужно получить номер последней буквы слова до пробела (с учетом пробелов в начале).

Если идти по строке с конца, то не придётся учитывать пробелы в начале.



0



0 / 0 / 0

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

Сообщений: 75

02.05.2022, 14:44

 [ТС]

3

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



0



684 / 391 / 200

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

Сообщений: 1,586

02.05.2022, 15:12

4

Канеки Кен, какую строку вы вводите и что хотите оттуда получить?



0



Verevkin

Нарушитель

8578 / 4583 / 1057

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

Сообщений: 21,487

02.05.2022, 15:28

5

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

Так мне нужно, чтобы вначале учитывало тоже.

Не нужно. Тебе нужно найти номер позиции последней буквы относительно начала (нуля).

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

C
1
2
3
4
5
6
7
// номер последнего символа строки, не являющегося пробелом.
unsigned foo(char* s)
{
  char* ptr = s + strlen(s) - 1;
  while (*ptr == ' ' && ptr > s) ptr--; 
  return (unsigned)(ptr - s);
}



1



Канеки Кен

0 / 0 / 0

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

Сообщений: 75

02.05.2022, 15:47

 [ТС]

6

Решил

C
1
2
3
while (slovo[i] != ' ') {
    i++;
    }



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

02.05.2022, 15:47

6

So I have an array of names and I need to find the position of the blank and put anything that comes before it into fname and put everything that comes after the blank into lname. I have absolutely no idea what I’m doing and I got help from my teacher and she gave me the 3 lines of code that come after posit_of_blank, fname and lname and said that all I had to do was figure out what goes in place of the … and I haven’t got a clue.

using namespace std;
#include "PersonNameFileCreator.h"
#include "PersonName.h"

int main()
{
  string arr_names[] = {"Adam Burke", "Madeline Kramer", "Scott Gardner", 
                        "Tonya Lopez", "Christoper Hamilton", 
                        "Andrew Mitchell", "Lori Smith" };

  PersonNameFileCreator fil_names("names.txt);
  
  for (auto one_name : arr_names)
  {
    int posit_of_blank = ?
    string fname = ?
    string lname = ?
    PersonName onePerson(fname, lname);
    fil_names.write_to_file(onePerson);
  }

  return 0;
}

Приветствую всех, сегодня поговорим о строках. Все мы так или иначе используем string в своих приложениях. Но у начинающих программистов возникают проблемы в понимании и с работой с этим типом. Строку можно представить в виде массива символов, однако это не так, так как строки являются ссылочными типами. Строка неизменна, каждый раз когда мы пытаемся изменить строку, старая стерается и создается новая. Так как строки являются ссылочными типами они находятся в куче.

Объявление и инициализация строк:

string str;

string str1 = “hello”;

string str2 = null;

string str3 = new String(‘X’, 3); // результатом будет строка “XXX”

string str4 = new String(new char[] { ‘n’, ‘o’, ‘o’, ‘k’, ‘e’, ‘r’, ‘y’, });

Как из строки по индексу получить символ?

string s1 = “nookery”;

char ch1 = s1[4]; // символ ‘e’

Console.WriteLine(ch1);

Так как мы знаем что строка, состоит из символов, то нам достаточно указать какой индекс символа нас интересует в строке и мы можем его вывести либо сохранить в переменной, что я и сделал. Однако изменить символ в строке нельзя, так как это не ссылочный тип переменных, для изменения данных в строке необходимо использовать доступные для этого  методы.

Как найти символ или целое слово в строке?

string str = “nookery it’s fun!”;

char ch = ‘y’;

int indexOfChar = str.IndexOf(ch); // равно 6

Console.WriteLine(indexOfChar);

Мы создали строку, и указали в качестве поиска символ y воспользовались методом IndexOf(); и сохранили результат в целочисленной переменной. Результат стал цифра 6, так как первое вхождение символа y было по индексу 6.

Так же мы можем осуществить не только поиск символа но и подстроки, в примере ниже мы из строки предложения, найдем целое слово!

string str = “nookery it’s fun!”;

string subString = “fun”;

int indexOfSubstring = str.IndexOf(subString); // равно 13

Console.WriteLine(indexOfSubstring);

Мы в примере выше, воспользовались тем же метод IndexOf(); который принял другой аргумент, так как он имеет ряд перегрузок. И сохранили индекс вхождения слова в строку.

Еще одним часто используемым методом строк является StartsWith(); Который вернет true если слово в строке было найдено, в противном случаи false, таким образом этот метод можно использовать для поиска слова в тексте.

if(dg.StartsWith(“nookery”))

Как разбить строку на слова?

В следующем примере возьмем строку и разобьем ее на слова сохраним в массив и выведем в консоль. А воспользуемся мы методом Split(); который принимает в качестве аргумента символ, в нашем случаи пробел.

string str = “nookery it’s fun!”;

string[] text = str.Split(‘ ‘);

foreach (string s in text)

{

Console.WriteLine(s);

}

Метод Split(); возвращаем строковый массив, содержащий подстроки данного экземпляра, разделенного элементами заданного массива.

Однако этот метод не на столько хорош, как хотелось бы, потому что в строке между словами могло быть больше пробелов и соответственно это повлияло бы на разделения слов. Так как один пробел это один символ, два пробела два символа. А по этому лучше воспользоваться другим примером для разделения строки на слова:

string str = “nookery     it’s fun!”;

string[] text = str.Split(new char[] { ‘ ‘ }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s in text)

{

Console.WriteLine(s);

}

В данном примере мы воспользовались другой перегрузкой метода Split(); первый аргумент символ пробела остался не измененным, но добавился второй аргумент StringSplitOptions.RemoveEmptyEntries который позволяет удалить все пустые подстроки.

Как обрезать или удалить символ в строке?

Для этого воспользуемся методом Trim(); Который позволяет без параметров удалить пробелы в начале и в конце строки, однако он имеет ряд полезных перегрузок одна из них, удаление в начале или в конце строки заданного  символа.

string text = ” nookery it’s fun! “;

text = text.Trim(); // результат “hello world”

text = text.Trim(new char[] {‘n’,‘!’}); // результат “ookery it’s fu”

Для обрезки определенной части строки воспользуйтесь методом Substring(), имеет он два перегруженных метода, которые позволяют удалить до указанной позиции в начале строки и вторая перегрузка метода позволяет удалить с конца строки до указанной позиции символы.

string str = “nookery it’s fun!”;

// обрезаем строку до третьего символа

str = str.Substring(2);

// результат “okery it’s fun!”

Console.WriteLine(str);

// обрезаем последние два символа

str = str.Substring(0, str.Length 2);

// результат “okery it’s fu”

Console.WriteLine(str);

Как вставить слово в строку в определенное место?

В этом примере мы рассмотрим метод Insert(); который позволяет вставить в строку по индексу подстроку.

string str = “nookery  fun!”;

string subString = “it’s”;

str = str.Insert(8, subString);

Console.WriteLine(str);

Как видно из примера первый аргумент, это индекс с которого будет происходить вставка подстроки, а второй аргумент и есть сама подстрока.

Как удалить часть строки?

В этом нам поможет метод Remove(); Рассмотрим пример ниже:

string str = “nookery  fun!”;

// индекс последнего символа

int i = str.Length 1;

//удаляем последний символ

str= str.Remove(i);

Console.WriteLine(str);

// удаляем первые два символа

str = str.Remove(0, 2);

Console.WriteLine(str);

Как заменить слово в строке целиком?

Сейчас рассмотрим как можно в строке заменить полностью слово на другое. Для этого воспользуемся методом Replace();

string str = “nookery it’s fun!”;

str= str.Replace(“fun!”,“super!”);

Console.WriteLine(str);

В качестве первого аргумента метод принимает слово которое требует замены, если оно есть он поменяет его на слово которое во втором аргументе. Я этот метод еще использую когда требуется удалить определенное слово в строке. Для этого достаточно вторым аргументом  в  методе указать «» и ваше слово будет удаленно, можно так же им воспользоваться для удаления пробелов.

Как изменить регистр букв в строке на заглавные или прописные?

Это один из часто используемых  методов  ToLower(); ToUpper(); которые позволяют всю строку преобразовать в заглавную или прописную строку.

string str = “nookery it’s fun!”;

Console.WriteLine(str.ToLower()); // nookery it’s fun!

Console.WriteLine(str.ToUpper()); // NOOKERY IT’S FUN!

Конкатенация строк!

В заключительной части со строками хотелось затронуть не маловажную роль конкатенации. Когда вы имеете две и более строк и вам необходимо их объединить, обычно мы используем оператор +

string str = “nookery”;

str+=“it’s fun!”;

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

string str = “”;

for (int i = 0; i < 500000; i++)

{

str += i.ToString() + “, “;

}

Что бы избежать подобного рода ошибок необходимо использовать класс StringBuilder(); и его методы, в примере продемонстрирован пример с верху но с использованием класса StringBuilder();

var builder = new StringBuilder();

for (int i = 0; i < 500000; i++)

{

builder.Append(i);

builder.Append(“, “);

}

Интересной особенностью использования StringBuilder является еще одна фишка, можно сокращать длину строки следующим образом:

var builder = new StringBuilder();

builder.Append(“Приветствую вас на сайте nookery”);

builder.Length -= 7;

st.Length -= 10;

//Вывод

//Приветствую вас на сайте

Что интересно такой вариант не прокатит с обычными строками)

Формулировка задачи:

Друзья, помогите написать программу, которая найдет количество слов в тексте, оканчивающимся точкой. Или хотя бы количество пробелов (прибавлю к ним один = количество слов). Самым простым методом, без подключения заумных библиотек Заранее спасибо!

Код к задаче: «Найти количество слов или пробелов в строке»

textual

#include <stdio.h>
#include <conio.h>
int main() {
    
    int word_counter = 0;
    char str[80];
    int index = 0;
 
    puts("Enter string");
    gets(str);
 
    for(int i=0; str[i]; i++)
        if(str[i] == ' ') word_counter++;
 
    printf("Number of words: %dn", word_counter+1);
    getch();
return 0;
}

Полезно ли:

14   голосов , оценка 4.071 из 5

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