При нахождение пробела в строке нужно завершить программу.
Что именно не так делаю?
for (i = 0; i < s.length(); i++)
{
if (s.find(' '))
{
cout << "Найдем пробел";
break;
}
}
0xdb
51.3k194 золотых знака56 серебряных знаков232 бронзовых знака
задан 23 янв 2020 в 13:40
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 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;
}
ответ дан 3 ноя 2022 в 9:44
2
Канеки Кен 0 / 0 / 0 Регистрация: 25.04.2021 Сообщений: 75 |
||||
1 |
||||
Найти пробел в строке02.05.2022, 13:05. Показов 405. Ответов 5 Метки c++, string (Все метки)
В программу вводится слово с пробелами в начале и конце. Нужно получить номер последней буквы слова до пробела (с учетом пробелов в начале). Моя программа работает, если в конце слова не ставить пробелы. Но если поставить пару штук, то цикл почему-то не завершается. Подскажите, как исправить проблему.
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 минут
1 |
Канеки Кен 0 / 0 / 0 Регистрация: 25.04.2021 Сообщений: 75 |
||||
02.05.2022, 15:47 [ТС] |
6 |
|||
Решил
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