Solved

How to replace the \n with \r\n?

Posted on 1998-04-23
8
238 Views
Last Modified: 2013-11-19
I have a string :

      j = 0 ;
      j = sprintf(str, "Test string") ;
      j+= sprintf(str+j, "\nThickness %d ", nThickness);
      j+= sprintf(str+j, "\nWidth %d ", nWidth);

During runtime i wish to replace the \n by \r\n so that i
can display the string properly in an CEdit box.
How do i write simple function to do that?  
0
Comment
Question by:engllf
  • 3
  • 3
  • 2
8 Comments
 
LVL 23

Accepted Solution

by:
chensu earned 20 total points
ID: 1301499
Since we are on the MFC Programming Topic Area, we should use MFC.

CString strBefore;  // your str

...

CString strAfter;
for (int ni = 0; ni < strBefore.GetLength(); ni++)
    strAfter += strBefore[ni] == '\n' ? "\r\n" : strBefore[ni];


By the way, why can't you use "\r\n" directly instead of "\n"? In Windows, it is recommended using wsprintf rather than sprintf. And, you can use CString::Format.
0
 

Author Comment

by:engllf
ID: 1301500
Let me study through your suggestion...
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301501
look at ww.codeguru.com for a better CString extension class that lets you do search and replace.  That might help.

Also, doing this as shown above will be slow as the subscripting and concatenation of the string char by char is not very efficient.

If you want to use CString functionsm, use SpanExcluding or Find to find the '\n' and then insert a '\r' infront. eg.

CString myString; // whatever
CString temp = myString;
myString.Empty();
int n = temp.GetLength();
for (;;) {
  int i = temp.Find('\n');
  if (i < 0) {
    myString += temp;
    break;
  } else {
    myString += temp.Left(i) + "\r\n";
    temp = temp.Mid(i+1);
  }
}

but if you can, just format with \r\n instead
eg

CString myString;
myString.Format("Test string\nThickness %d \nWidth %d ", nThickness, nWidth);

andsafe yourself the trouble

Please reject and accept my answer if you find it more helpful.


0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301502
Ooops that should have been

CString myString;
myString.Format("Test string\r\nThickness %d\r\nWidth %d", nThickness, nWidth);

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 23

Expert Comment

by:chensu
ID: 1301503
I don't think the code shown by RONSLOW is faster than mine. RONSLOW's code relies much on how often the '\n' occurs. It will be definitely slower if the '\n' occurs frequently.
0
 

Author Comment

by:engllf
ID: 1301504
About 20% of my string is "\n".
The string is specially formatted and passed to another application via DDE.  The string is analysed and ...

If i am to use "\r\n", my string length
is going to increase significantly containing non-useful
information.
0
 
LVL 23

Expert Comment

by:chensu
ID: 1301505
You need to balance it. Space or time? The conversion also takes space.
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1301506
and you need somewhere to store the resultant string anyway.

The most efficient is to put in the "\r\n" in the first place.  No extra space required for converted string and not time required to convert it.

If that is not practical (for some reason), then my method will probably be faster (if you want to use CString functions).  You can probably get a little bit faster using straight C-like code and the standard library functions - but the code won't look as nice

0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now